这个出错信息一般是新手在编译Qt4第一个应用"Hello,World"的时候,翻开Qt编程的第一个例子。都说很简单。 #include <QApplication> #include <QWidget> int main(int argc, char *argv[]) { QApplication app(argc,argv); QWidget *ww=new QWidget(); ww->resize(300,200); ww->show(); return app.exec(); }
一编译结果出现了上面这个错误,那叫一个郁闷。
其实花点心思照着提示,新手也是可以自己解决问题的。根据提示QApplication提示,应该是头文件没找到。那我们可以查看当前目录下Makefile里的环境变量INCPATH知道make应用是去哪里找头文件的。例如
./Makefile 文件部分内容
15 CXXFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
16 INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I.
17 LINK = g++
第16行里面的,对应的去查找/usr/include/qt4/QtGui/QApplication这个文件是否存在(一般是不存在,存在就不会出错了)。不存在QApplication文件的原因大致有两个
1)没有装Qt4的开发包 .
解决办法把开发包装上,比如ubuntu下就是在shell里执行sudo install libqt4-dev;Fedora/SUSe下是在shell里执行sudo yum install qt4-devel
2) Qt4的开发包装了,但是调用了Qt3的qmake
因为有的系统里既装了Qt3,又装了Qt4。如果调用了qt3的qmake,那么上头的INCPATH里的头文件路径也指向了Qt3,那么是找不到QApplication这个文件的。对应的解决方法就是调用Qt4安装路径下的qmake去生成Makefile,最好用全路径。我的机器Qt4中qmake安装路径是
zhu@ubuntu:~/test/widget$ dpkg -L qt4-qmake |grep qmake |grep bin
/usr/bin/qmake-qt4
/usr/share/qt4/bin/qmake
所以只要执行
/usr/bin/qmake-qt4;make 或者 /usr/share/qt4/bin/qmake:make
都能以Qt4的文件去编译这个最简单的Qt4应用。
对于新学习Qt朋友而言,其实只要了解了这些内部缘由即可,这种情况一般就是环境变量没有设置正确的原因。
一是根本就没有设置环境变量,比如使用SDK方式安装Qt,但却又不使用Qt Creator作为IDE(Qt Creator在运行时会自动为开发者设置好环境),而是使用其他的IDE或者是vim等来做开发,这样自然就会爆出这个错误。
二是设置了环境变量却又没有设置正确。比如在X11下,设置好环境变量之后,需要重新登录shell,如果不这样做而直接开始开发,一般有可能会报出这个错误。
三是系统中同时存在多个版本的Qt。比如有Qt3和Qt4共存,有多个不同版本Qt4存在,这样就需要考虑一是清理一下环境,使用一个“纯净”的Qt4环境;1是如果在Windows上,可以思考是否有必要同时存在这么多的版本,如果没有实在的必要,统一即可,当然这也是在打造一个“纯净”的Qt4环境;2是如果是在X11上,由于Qt3的存在有可能是系统的需要,系统中有好多的包是依赖Qt3的,那么要不每次在不同的Qt版本间切换时,就变更一下环境变量的设定,要么为各个Qt版本设定为不同的用户使用,每个用户都有唯一的环境了;要么就是使用脚本,做法是为每个qt版本写设置环境变量的脚本, 仅在需要的时候对当前shell设置环境,这种做法对于初学者而言有一定难度,但是效果还是比较好的。
好了,这个问题我想大概总结的比较清楚了,供大家参考,如果还有更多的情况,也请补充,我们共同找到最佳的解决方案。