Qt tr 函式不起效的小問題

2021-07-27 09:18:08 字數 1368 閱讀 5995

最近在自學qt,進展比較慢,使用的參考書籍是

中國工信出版集團 電子工業出版社 出版的 《qt5 開發及例項(第2版)》

——————————————————————————————

在涉及到多國語言翻譯這一問題時,書中14章只介紹了基本的使用方法,但在書中第8章第2個例子中,結合tr()方法卻不能完成翻譯。

因為第8章第2個例子需要翻譯的物件是由qabstracttablemodel這個類繼承來的。

附上部分關鍵**:

這是根據書中原例更改的程式,注意,此**中直接使用了tr()函式

#include "modelex.h"

modelex::modelex(qobject *parent)

:qabstracttablemodel(parent)

void modelex::populatemodel()

然而在按lupdate和lrelease方法生成.ts和.qm檔案後,結果卻是如下圖所示:

翻譯失敗了。

可是為什麼呢?

後來我去stackoverflow上查了一圈,有人提到,tr這個函式本質上是從qobject這個類中呼叫的。

所以我將**修改為:

#include "modelex.h"

#include

modelex::modelex(qobject *parent)

:qabstracttablemodel(parent)

void modelex::populatemodel()

重新按照lupdate和lrelease方法操作,

於是翻譯就成功了:

這時候開啟.qm檔案

注意左側邊框裡上下文那裡顯示是qobject中的翻譯文字。

而在修改之前,qobject中大量的翻譯文字是在modelex中。這可能就是兩種寫法乙個有效另乙個無效的原因了。

所以還是要明確一點,tr()這個函式實際上是對qobject物件起作用的,如果像本例中,並非直接對qobject物件進行翻譯(qabstracttablemodel不是qobject物件),則應該使用qobject::tr方法顯式地進行呼叫。[[

TO DATE函式的小問題

今天比較忙,總結乙個已經就發現的小問題。使用to date函式的時候,小心不要被oracle的 慣性 騙了。例子很簡單 sql alter session set nls date format yyyy mm dd hh24 mi ss 會話已更改。sql select to date 2006 ...

DATEDIFF函式小問題

declare cmdtext varchar 8000 declare userindex int set cmdtext set userindex 0 while userindex 30beginif userindex 29 select cmdtext cmdtext select co...

建構函式的乙個小問題

精簡過的 兩個建構函式如下 string string string string int n 如果我這樣呼叫 string s0 a cout endl s0 s0 endl 列印出97個0,在vc上除錯發現呼叫的是 string string int n 建構函式 如果這樣呼叫 string s...