如下内容引用于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
函数中。当须要显示成中文时,使用国际化机制完成。