『壹』 Linux下Qt編程怎麼顯示中文
你的是qt3版本?螞手
沒平台,你試悶碰嫌下下面的吵畝方法:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf8"));
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
『貳』 如何在QT中顯示中文字元
跟Qt關系不大,這和你源文件編碼格式和編譯器有關系。
可以給你個建議把上面的程序改成Qt版本的, 哈哈。指野步驟如下~
1 是用qtcreator
2 如果是, 檢查唯讓喊
工具--選項--文本編輯器--行為 選項卡下的File Encodings 中,default Encoding下拉選框里沒有中文編碼(gbk、gb2132或gb18030等)。我這里是system
3 在程序里
int main(xxxx)
{
QApplication app(xxxx);
QTextCodec::setCodecForTr(QTextCodec::codecForName("system"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("system"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("system"));
qDebug() << QObject::tr("中文");
//記得中文用QObject::tr()包裹起來,這樣就可以顯示滑絕中文了。
app.exec();
}
『叄』 qt怎麼在listview顯示長文本
qt在侍鍵listview顯示長文本步驟如下。
1、在QtDesigner中設計的界面中添加ListView控制項。
2、余談山使用前必須初始化即使用預定義模型。
3、在文本編輯中輸入文本並單擊添加按鈕時,應該在列表視圖中豎中添加文本。
『肆』 qt如何在tablewidget控制項中顯示中文
在main函梁雹數中加上
QTextCodec::setCodecForTr(QTextCodec::codecForName("橡遲帆system"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("system"旦凱));
『伍』 如何使用qt的國際化,本地化支持 步驟
國際化是指在代碼設計上銀笑羨加入能方便的移植到其他國家和地區的特性。而本地化是指將具有國際化支持的代碼翻譯成本國或地區的語言,是本地用戶更容易使用。 I18n是Internationalization的簡寫,l10n是Localization的簡寫。
在Qt中創建可以國際化的代碼
最常見的是將要翻譯的字元串加上tr語句,tr語句的標准語法是:
Context::tr(sourceText,comment), 比如 QString str2 = QTextEdit::'''tr'''(「Letter」,」paper size」);
Context(上下文)和comment(注釋)是可以省略的,它們的意思分別是 Context:用於指明該翻譯文字所在的上下文,一般為類名。因為同樣的一個字串在不同的環境中翻譯出來是不一樣的,比如都是死,皇帝是崩,普通老百姓就是死翹。 comment: 用於指明要翻譯文字的一個注釋。因為作翻譯的可能並不是寫代碼的人。比如spring既有彈簧的意思,又有春天的意思。designer裡面選組建的時候,有一個blue spring(藍色的彈簧)是用於addStretch()的,如果沒加說明,有可能被翻譯成藍色的春天。
在寫代碼的時候,我們可能希望把所有的字元串都放在一個地方,而方便於我們自己集中作改動。真正用到的時候,用一個字元常量指針去訪問。那麼我們可能想到這樣寫代碼
// Wrong,這種實現Qt不認識,無法作翻譯
const char *appName=「OpenDrawer 2D」;
QString translated=tr(appName);
//ok, 需要使用QT_TR_NOOP字串來提醒Qt系統該翻譯的字串
const char *appName=QT_TR_NOOP(「OpenDrawer 2D」);
QString translated=tr(appName);
QT_TR_NOOP的語法是QT_TR_NOOP(sourceText),它還有兩個變體,語法如下升滾
QT_TRANSLATE_NOOP ( context, sourceText )
QT_TRANSLATE_NOOP3 ( context, sourceText, comment )
對應介紹的context和comment,其意思應該不難理解
還有一種情況是在一個字串中有一部分來源於變數。那我們看看兩種正誤的寫法
// wrong 這種寫法無法被正確識別
statusBar()->showMessage('''tr'''(「Host 」 + hostName+「 found」);
//ok 利用鋒拍了QString的arg()函數。在翻譯時,需保留%1
statusBar()->showMessage('''tr'''(「Host %1 found」).arg(hostName)
在書寫了含可翻譯語句的程序後,我們來看看如何生成翻譯文件
生成翻譯文件
首先要修改.pro工程文件,比如在app.pro里加入
TRANSLATIONS+=app_en.ts app_zh_CN.ts app_zh_TW.ts #後面你可以加你想要翻譯的各種版本
CONFIG += localize_deployment
SYMBIAN_SUPPORTED_LANGUAGES += zh_CN
SYMBIAN_LANG.zh_CN = 31
註:其中SYMBIAN_SUPPORTED_LANGUAGES ,SYMBIAN_LANG.zh_CN 兩行是localize_deployment.prf 中缺少的兩行,簡體中文qs 文件只使用語言代號zh時 與系統解析的" 語言_區域"區域格式不符,請先這樣設置。
然後在shell, 里執行如下語句( 在Qt SDK 中請打開Qt for Desktop的命令行,目前lupdate 命令沒有為Qt for symbian生成的版本)
$ lupdate app.pro
$ linguist app_zh_CN.ts
$linguist app_zh_TW.ts
$ lrelease *.ts
$ lupdate app.pro #會根據.pro里指示的內容,生成app_zh_CN.ts和app_zh_TW.ts $ linguist app_zh_CN.ts 翻譯其中一個文件,linguist是一個圖形化的工具, $linguist app_zh_TW.ts 翻譯另一個, $ lrelease *.ts 將.ts文本文件轉換成.qm二進制文件,會生成app_zh_CN.qm和app_zh_TW.qm,方便應用載入
.ts 是Text String的縮寫;.qm是Qt Message的縮寫所以翻譯文件生成的流程就是 .cpp —> .ts —>.qm lupdate是負責找出qt源代碼中需要翻譯的字元串的。會搜tr/QT_TR_NOOP/QT_TRANSLATE_NOOP /QT_TRANSLATE_NOOP3等語句 linguist是手動翻譯.ts文件的一個工具,真正加入本地語言是在這一步 lrelease是將.ts轉換成.qm的一個工具。需要提醒一下的,lupdate生成的.ts文件不會覆蓋掉已經翻譯過的.ts文件,只會更新其中的內容。所以其名字為languange update
有了翻譯文件,我們看看系統是怎麼載入翻譯文件的。
載入翻譯文件
一個例子,很簡單的說明問題
QTranslator qt_translator;
QTranslator app_translator;
if( usersettings.language == SimpleChinese ) {
// Qt』s own translations
qt_translator.load("qt_zh");
qApp->installTranslator( &qt_translator );
// application translation
app_translator.load("myprogram_zh");
qApp->installTranslator( &app_translator );
}
這里,我們看到有兩個翻譯載入器,其中一個是載入應用程序的翻譯文件,也就是我們在第二個步驟中生成的文件。另外一個是Qt系統的翻譯文件,比如 Qt的版權信息,designer的一些菜單等,名字叫qt_後帶一個語言版本。
有時候我們在系統啟動的時候,就需要判斷本地的語言,然後載入不同的翻譯文件,那麼代碼就是如下結構
QString locale = QLocale::system().name();
QTranslator translator;
translator.load(QString("trollprint_") + locale);
app.installTranslator(&translator);
在pro文件中部署qm文件,使得在symbian系統下能方便的檢索到qm文件,而不用再load方法中設置路徑
symbian: {
addFiles.sources = helloworld_en.ts helloworld_zh_CN.qm helloworld_zh_TW.qm helloworld_zh_HK.qm
addFiles.path = .
DEPLOYMENT += addFiles
}
本地設置的語言,和我們的.qm前面部分並不完全一樣,有一個.qm查詢的過程,假如本地字語言名字是fr_CA.ISO8859-15,載入程序會按照 trollprint_fr_CA.ISO8859-15.qm,trollprint_fr_CA.qm,trollprint_fr.qm順序來載入,如果以上都沒有,將使用默認的語言
一個極其簡單的例子 //main.cpp
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTranslator translator;
translator.load("hellotr_zh");
app.installTranslator(&translator);
QPushButton hello(QPushButton::tr("Hello world!"));
hello.resize(100, 30);
hello.show();
return app.exec();
}
本地化中文常式:File:HelloWorld.zip, 語言代碼可以在ISO 639-1 codes中找到(two-letter ISO 639 language code)。
遠程編譯
遠程編譯需要在pro文件中如下聲明ts qm,否則遠程編譯器找不到 ts和 qm 文件
OTHER_FILES += helloworld_en.ts helloworld_zh_CN.ts helloworld_en.qm helloworld_zh_CN.qm
參見Remote Compiler troubleshooting
相關文檔
Internationalization with Qt