如下內容引用於Qter開源社區(www.qter.org),做者yafeilinuxhtml
http://www.qter.org/thread-903-1-1.htmllinux
1. .pro
項目文件增長新的語句
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
這條語句的含義是,若是QT_MAJOR_VERSION
大於4
(也就是當前開發使用的是Qt 5
及更高版本),須要增長widgets
模塊。
在Qt 4
中,Qt
提供的所有圖形界面相關類都包含在Qt Gui
模塊。Qt 5
將一些圖形界面類移動到了Qt Widgets
模塊。因此在具備圖形用戶界面的應用程序中,須要增長這個模塊。如今建立的程序所使用的部件都在全新的Qt Widgets
模塊中,而不是Qt 4
時的Gui
模塊。因此在Qt Creator
建立新項目時,能夠看到名稱由之前的「Gui
應用」修改成瞭如今的「Widgets Application
」。
若是項目僅須要支持Qt 5
,也能夠直接添加QT += widgets
一句。不過爲了保持代碼兼容,最好仍是按照這裏這樣編寫。
2.
修正代碼中的include
語句
Qt 5
添加了一些新的頭文件,而且將之前Qt Gui
模塊的某些頭文件改爲Qt Widgets
模塊。這個改變仍是因爲Qt 5
中將圖形部件從Qt Gui
模塊剝離開來,放到了全新的Qt Widgets
模塊中的緣故。例如,Qt 4
中使用的
#include <QtGui/QApplication>
語句,須要更改成:
#include <QtWidgets/QApplication>
不過,還有另一種更好的方式,它在Qt 4
和Qt 5
中都適用。那就是直接使用類名:
#include <QApplication>
除此以外,在使用一些類時發生了編譯錯誤,則可能須要添加更多的頭文件。例如在Qt 4
中,能夠直接使用下面的語句:
可是在Qt 5
中,這個語句將會出錯。由於QDrag
位於Qt Gui
模塊,而語句中的QDrag
使用了QWidget
類。在Qt 4
中,QWidget
一樣位於QtGui
模塊,可是在Qt 5
中,QWidget
被移動到Qt Widgets
模塊。所以爲了讓這條語句經過編譯,須要額外添加QWidget
頭文件:
#include <QWidget>
3. Qt 5
關於中文顯示的問題
Qt 5
移除了在Qt 4
中極具爭議的QTextCodec::setCodecForTr
和QTextCodec::setCodecForCStrings
等函數,也就是說,在Qt 5
中,不能繼續使用下面這種經過設置字符編碼的方法來顯示中文:
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
QLabel *label = new QLabel(this);
label->setText(tr("你好Qt!"));
Qt 5
要求源代碼文件統一使用UTF-8
編碼。所以,若是須要簡單地顯示中文,只需像這樣編碼:
label->setText("Hello World! 你好Qt!");
可是考慮到開發後期國際化的工做,最好爲須要顯示到界面上的字符串添加tr
函數:
label->setText(tr("Hello World! 你好Qt!"));
可是這裏還要提醒讀者,儘可能不要直接在程序中使用中文字符串,而且tr
函數中也不該該出現除英文以外的其它語言字符。建議只使用英文設置程序中全部直接面向用戶的字符串,而且將這些字符串所有包含在tr
函數中。當須要顯示成中文時,使用國際化機制完成。