QT中文顯示亂碼解決


問題如下:
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目錄下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM