qt学习记录-----从Qt4到Qt5安装、程序迁移和发布

如下内容引用于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 中,能够直接使用下面的语句:
        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::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 函数中。当须要显示成中文时,使用国际化机制完成。
相关文章
相关标签/搜索