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 4Qt 5中都适用。那就是直接使用类名:
       #include <QApplication>
       除此之外,在使用一些类时发生了编译错误,则可能需要添加更多的头文件。例如在Qt 4中,可以直接使用下面的语句:
       QDrag *drag = new QDrag(event->widget());
       但是在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::setCodecForTrQTextCodec::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函数中。当需要显示成中文时,使用国际化机制完成。
posted @ 2018-01-16 23:40  flamewen  阅读(289)  评论(0编辑  收藏  举报