qt学习记录-----从Qt4到Qt5安装、程序迁移和发布
以下内容引用于Qter开源社区(www.qter.org),作者yafeilinux
http://www.qter.org/thread-903-1-1.html
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函数中。当需要显示成中文时,使用国际化机制完成。