Qt右鍵選單是英文怎麼辦?

許多新學Qt程式設計的朋友一定曾碰到過這樣的情況,就是程式執行時介面的各項字串都是中文,右鍵選單卻偏偏全是英文,真叫人哭笑不得。

哎喲喲,這正應了老鳥程式設計師的那句調侃話語:“程式設計這碗飯,看起來山珍海味,吃在嘴裡卻全是砂呀。年輕力壯的碼農們,這又該如何是好呢?”

工具/原料

Qt

一、問題描述

在進行Qt程式設計時,要想使介面上的文字顯示為中文,比較常用的方法有兩種:

1)在介面設計器中全部使用中文

2)在初始程式碼中使用英文,隨後使用工具進行翻譯,最後再載入翻譯檔案,從而使得介面呈現為中文

不過,儘管我們為了讓Qt介面顯示中文煞費苦心,但程式執行時彈出的右鍵選單卻仍然為英文。

Qt右鍵選單是英文怎麼辦

二、解決辦法

要想使右鍵選單上的字元顯示為中文,我們需要重新實現相應控制元件的contextMenuEvent函式。該函式繼承於父類的虛擬函式,訪問許可權為protected。

在這個示例中,由於我們需要在編輯框內(QTextEdit類)彈出右鍵選單,因此就需要重新實現QTextEdit的contextMenuEvent函式。

Qt右鍵選單是英文怎麼辦

為了做到這一點,我們需要往工程中新增一個新類,該類繼承於QTextEdit,然後再在這個新類中實現contextMenuEvent函式。新增新類的方法是在工程名上右擊滑鼠,然後選擇“新增新檔案”。接著,在彈出的對話方塊中選擇C++類。

不過,這兒有一個問題。由於在新增新類時,並不能直接選擇繼承於QTextEdit,因此在這裡我們就先選擇繼承於QWidget,新增好以後再在程式碼中進行修改。

Qt右鍵選單是英文怎麼辦

Qt右鍵選單是英文怎麼辦

Qt右鍵選單是英文怎麼辦

新類新增好以後,開啟新類的標頭檔案,再將QWidget改為QTextEdit。注意,包含的標頭檔案也需要修改。

Qt右鍵選單是英文怎麼辦

然後,在新類的標頭檔案中新增protected型別的contextMenuEvent函式。

注意,由於是繼承於父類的虛擬函式,Qt會自動將其函式名顯示斜體,以示區別普通函式。

Qt右鍵選單是英文怎麼辦

隨後,我們在新類的原始檔中實現該函式。簡單起見,我在此就只建立了一個選單項作為示例。在這兒提醒大家注意,別忘了包含相應的標頭檔案。

Qt右鍵選單是英文怎麼辦

現在,就只剩下最後一步了。我們在主程式中定義一個新類型別的變數,然後像往常一樣使用即可。

Qt右鍵選單是英文怎麼辦

重新編譯程式,看看,是不是選單已經變成中文了?

Qt右鍵選單是英文怎麼辦

三、注意

在contextMenuEvent函式的程式碼中直接使用中文的方法並不妥當,以上示例我只是為了簡單起見。

建議:在程式碼中仍然使用英文,並用tr函式將待翻譯的字串括起來,然後再使用Qt自帶的Linguist工具將其譯成中文,最後載入翻譯檔案。

若想知道Qt怎樣使用翻譯檔案,可以參考我的Qt程式設計經驗系列《Qt怎樣翻譯程式中的字串:提取和翻譯》和《Qt怎樣翻譯程式中的字串:生成和載入》。

Qt右鍵選單是英文怎麼辦

注意事項

要在哪個元件上彈出中文選單,就重新實現該元件的contextMenuEvent函式。

相關問題答案