QT中文顯示亂碼解決

pamxy發表於2013-03-29

轉自: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目錄下


相關文章