2014-12-03 135 views
-1

我在CentOS 7上構建了一個QT項目。我將/etc/locale.conf更改爲'zh_CN.gb2312'。然後QFiledialog沒有'DontUseNativeDialog'出現凌亂的代碼

當我打開QFiledialog沒有「DontUseNativeDialog」來選擇一個文件,文件名顯示在對話框中出現亂碼,即使我想補充以下這些在main()代碼:

QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312")); 
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312")); 
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312")); 

如何解決這個問題 ? 我的應用程序不僅支持英文或中文,它應該與Linux內的所有語言兼容。 QT必須能夠自動檢查系統語言,但是如何?

謝謝。

+1

你能指定_messy_嗎?也許包括一個截圖? – Bowdzone 2014-12-03 12:03:58

回答

0

這可能是祕密:
當我在UTF-8環境中,並命名一個文件時,文件名以UTF-8格式存儲。當我轉換到CGB2312環境時,glibc中的utf-8在GB2312中解釋,所以亂碼就出現了。在QT QFiledialog中不是很多亂碼,但在bshel​​l中是如此。 QT本地GUI窗口和bshel​​l都基於glibc,對吧?

可能是gnome專門對待它,它足夠聰明地解釋文件名的編碼,所以在gnome文件瀏覽工具包中,名稱顯示在UTF-8和GB2312環境下。