QT中文實現亂碼解決

 

轉載自:http://www.cnblogs.com/qq78292959/archive/2012/05/30/2527099.html

 

問題如下:
1.中文顯示亂碼
2.數據庫連接不上

問題一:
但是如果我們的軟件只運行在中文系統下,最簡單的方法:在main函數中調用QTextCodec::setCodecForTr( QTextCodec::codecForName("GBK") );就可以了。
記得這句要在所有使用tr的語句前調用。以後在需要使用中文的地方使用tr("中文字符");就可以了。但事情真的這麼簡單嗎?當我將一個測試程序拷貝到一臺沒裝過Qt的電腦上時,tr中的字都顯示不了了。奇怪的是用Creater IDE生成的UI界面中的漢字能正常顯示。看了qmake生成ui的.h文件,發現那些中文字符已經被自動轉換成UTF8 encoding了。奇怪的是,QTextCodec::setCodecForTr( QTextCodec::codecForName("GBK") );改爲QTextCodec::setCodecForTr( QTextCodec::codecForName("utf-8") );也不行。沒辦法了,查資料,然後看了源代碼。折騰了N久終於搞清楚了。
原來Codecs是以plugin的形式被調用的,顯示中文的codec plugin文件是qcncodecs4.dll。裏面有QGb18030Codec、QGbkCodec和QGb2312Codec三個類。注意,後兩個類是從第一個類派生的,因爲它們的字符只是Gb18030的特定子集。GBK和GB2312只是爲了兼容舊的系統和軟件。大家以後可以直接使用GB18030。這個類真正的“肉”就是巨長的一個編碼數組。
既然找到了正主兒,那麼問題也就迎刃而解了。將qcncodecs4.dll拷入目標機器的特定路徑,如果你開發的電腦Qt安裝目爲C:\Qt的話,qcncodecs4.dll應該拷入目標電腦的C:\Qt\Plugins\Codecs。運行程序,看到了久違的漢字。
有沒有更好的方法呢?在Qt(Cute)中當然有了
感謝Qt的plugin系統,將qcncodecs4.dll拷貝到運行程序目錄下的特定目錄,如運行程序完整路徑爲C:\MyApp\MyApp.exe,那麼qcncodecs4.dll應拷貝至C:\MyApp\Plugins\Codecs下,然後在main函數中加入下面的代碼:
QApplication a(argc, argv);
QString sPath = a.applicationDirPath();
sPath += QString("/plugins");
a.addLibraryPath(sPath);
一句話解決問題一首先,在發佈的應用程序文件夾下建立Plugins\Codecs
          其次,將qcncodecs4.dll庫文件放到Plugins\Codecs目錄下

問題一補充:
  由於本人開發是在windows下開發,當移植到ARM板上時會顯示亂碼 即使我們加入QTextCodec::setCodecForTr( QTextCodec::codecForName("GBK") );這條語句也還是一樣的亂碼。因爲不同平臺字體編碼格式不同。
   解決:將windows字體庫拷貝到開發板fonts/目錄下即可。同時支持最大字體顯示
問題二:
程序使用sqlilte數據庫,標機沒有這個數據庫驅動。所以導致連接數據庫的時候連接不上。

解決辦法如下:
1.在發佈的應用程序文件夾下建立如下文件夾Plugins\sqldrivers
2.到QT安裝目錄下,例如本人安裝目錄C:\Qt\2009.05\qt\plugins\sqldrivers,將此目錄下的所有文件拷貝到1目錄下

分類: Qt
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章