作为一个Newbie,来到Qt5的世界,面对第一个Hello Qt程序,就栽了一跟头,是因为和Qt4相比,Qt5的模块结构发生了变化。
程序很简单,就是显示一个简单的基于对话框的Hello Qt程序。界面上有一个按钮,按钮上面的字符是"Hello Qt!",单击该按钮后,对话框关闭,程序退出。
#include <QApplication>#include <QPushButton>int main(int argc, char* argv[]){QApplication app(argc,argv);QPushButton pushButton(QObject::tr("Hello Qt!"));pushButton.show();QObject::connect(&pushButton, SIGNAL(clicked()), &app, SLOT(quit()));return app.exec();}qmake -projectqmake make之后提示出错:fatal error: QApplication: No such file or directory
由于Qt5将大部分桌面部件移到了Qt Widgets模块中,即QApplication已经从原来的<QtGui/QApplication>移动到<QtWidgets/QApplication>了。从下图也可以看出来。
所以为解决找不到QApplication文件 这个问题,有两种方法:
法1:
#include <QtWidgets/QApplication>#include <QtWidgets/QPushButton>
法2:也可以保持原代码不变,即保持
#include <QApplication>#include <QPushButton>而在.pro文件中添加
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
之所以这样加,是国为看了一下官方的Qt5的Demo,,发现里面有这样一句:
QT+= core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgets个人感觉最佳的风格是方法2,因为这保持了老版本和新版本风格的统一和兼容。这不但提高了通用性,还简化了我们的记忆:我们并不需要知道某个类是属于哪个模块的。只管交给qmake来处理就可以了。
================================================================
故根据上述分析,得出的解决方法如下:
对于所有Qt5写的代码,手动修改.pro文件,添加
QT+= core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgets即可完美解决类似QApplication: No such file or directory 这种新旧版本兼容问题。
最后附上一张我的第一个Qt程序:
又或者是后天的,我们不断学习,努力进取的路途中辛苦寻到的武器。