作为一个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 -project //生成.pro文件
qmake HelloQt5ByHand.pro //根据.pro文件生成Makefile文件
mingw32-make //根据Makefile文件编译链接生成 可执行文件
由于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
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
个人感觉最佳的风格是方法2,因为这保持了老版本和新版本风格的统一和兼容。这不但提高了通用性,还简化了我们的记忆:我们并不需要知道某个类是属于哪个模块的。
只管交给qmake来处理就可以了。
================================================================
故根据上述分析,得出的解决方法如下:
对于所有Qt5写的代码,手动修改.pro文件,添加
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
即可完美解决类似QApplication: No such file or directory 这种新旧版本兼容问题。
最后附上一张我的第一个Qt程序: