QApplication: No such file or directory 完美解决方案

作为一个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文件编译链接生成 可执行文件


之后提示出错: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 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程序:


展开阅读全文

没有更多推荐了,返回首页