1. 程式人生 > >也談Qt經典出錯資訊之QApplication: No such file or directory

也談Qt經典出錯資訊之QApplication: No such file or directory

這個問題似乎是老生常談了,好多朋友也都就這個問題做了探究,這裡我說說我的看法,以及對於初學者而言,如何快速定位問題,快速解決問題,

下面是網友zhu的完整闡述:

這個出錯資訊一般是新手在編譯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安裝路徑是
[email protected]:~/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應用。

原文連結:
http://www.cuteqt.com/blog/?p=307

對於新學習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設定環境,這種做法對於初學者而言有一定難度,但是效果還是比較好的。

好了,這個問題我想大概總結的比較清楚了,供大家參考,如果還有更多的情況,也請補充,我們共同找到最佳的解決方案。

相關推薦

Qt經典出錯資訊QApplication: No such file or directory

這個問題似乎是老生常談了,好多朋友也都就這個問題做了探究,這裡我說說我的看法,以及對於初學者而言,如何快速定位問題,快速解決問題, 下面是網友zhu的完整闡述: 這個出錯資訊一般是新手在編譯Qt4第一個應用”Hello,World”的時候,翻開Qt程式設計的第一個例子。都

Qt編譯錯誤“GL/gl.h:No such file or directory”的解決方法

導致 安裝 egl 新版 工具 ubunt 沒有 一個 -o 備註:1)操作系統:Ubuntu-14.04或12.042)Linux用戶:root3)Qt版本:qt-linux-opensource-5.2.0-x86 為了迎接Qt的新紀元(從諾基亞移居到

qt5中的QApplication: No such file or directory問題

出現原因:Qt5裡不再用QtGui模組,而是使用QtWidgets模組。解決方法: 在.pro里加上QT += widgets 實測 greaterThan(QT_MaJOR_VERSION,4) : QT+= widgets 或者 QT+= widgets qt4

QT5.0.1在Windows下 出現QApplication: No such file or directory 問題的解決辦法

  #include <QApplication> #include <QPushButton> #include <QLabel> #include <QHBoxLayout> int main(int argc, char **argv) {

Qt5中qapplication no such file or directory

最近開始學Qt,對照著霍亞飛的《Qt Creator 快速入門》第二版,裡面用的是Qt4,但是我直接裝了qt opensource後發現時Qt5,就在Qt5的環境上學習。 在第二章2.3節,自己編寫一個main函式時執行出現qapplication no such file

win10上用Python2.7處理文字,出錯IOError: [Errno 2] No such file or directory:如何解決???

# coding=utf-8 import os import jieba import sys import re import time import jieba.posseg as pseg sys.path.append("../") jieba.load_use

Qtopengl:錯誤: 無法開啟包括檔案:“gl/glut.h”: No such file or directory

我使用的是vs2008,相信vs2005應該跟這個步驟差不多,執行的時候總是提示:fatal error C1083: 無法開啟包括檔案:“GL/glut.h”: No such file or directory這個時候就要進行相應的如下操作:下載GLUT工具包,然後如下:

jenkins 執行shell命令出錯command not found 和No such file or directory

image 圖片 分享圖片 root not found wid 腳本 local 成功 [root@localhost usr]# sh test.sh command not found [root@localhost ~]# cd usr-bash: cd: us

CentOS 安裝 oralce Java的圖形出錯: libXtst.so.6: cannot open shared object file: No such file or directory

[[email protected] database]$ ./runInstaller -ignoresysprereqs Starting Oracle Universal Installer... Checking installer requirement

利用Qt Designer 進行 空間提升propomotion 的時候異常: NO such file or directory

directory 因此 沒有 src ase rop 報錯 包含 類名 1. 因為在提升的時候,只設置了 類名,以及文件名,但是沒有給定Qt 的uic 的指定搜索路徑,因此報錯 在生成的ui_xxxx.h文件必然找不到這個文件。 如下圖: 2. 解決方法   

cuda程式執行出錯: libcudart.so.8.0: cannot open shared object file: No such file or directory

問題描述: error while loading shared libraries: libcudart.so.8.0: cannot open shared object file: No such file or directory 解決辦法:首先確認/etc/pro

vc++6.0編譯出錯解決方法---"No such file or directory "

fatal error C1083: Cannot open precompiled header file: 'Debug/ChineseChess.pch': No such file or directory 解決方法: (1)在選單欄裡的工程 -> 設定 -&

git公鑰出錯"//.ssh/id_rsa" failed: No such file or dir

lock 簡介 沒有 命令 ner 寫的權限 cto key pair 提示 簡介:ssh-keygen使用時出現以下問題時,使用以管理員身份運行的“命令提示符”來生成公鑰,即可解決: C:\Users\admin> ssh-keygen -t rsa -C "24

錯誤記錄: linux 使用yum安裝軟體出錯 basn: /usr/bin/yum: /usr/bin/python: bad interpreter: no such file or

最近在使用yum安裝一些東西的時候出現錯誤:比如 yum -y install gcc 錯誤提示: basn: /usr/bin/yum: /usr/bin/python: bad interpreter: no such file or directory 通過網上查詢發現這是由

Ceph叢集增加Mon時出錯:admin_socket: exception getting command descriptions: [Errno 2] No such file or direc

當我用ceph-deploy工具為叢集增加Mon時,即執行 [email protected]:/ceph/cluster# ceph-deploy --overwrite-conf mon add zjt-02 出現以下錯誤: 由下面這條警告知道,在ceph.conf

交叉編譯linux3.0.8錯誤loading shared libraries: libz.so.1cannot open shared object file: No such file

當我們安裝好交叉編譯器後,我們要對友善之臂提供的linux3.0.8進行編譯。 按下面步驟進行: $tar xzf linux-3.0.86-20150324.tgz $ cd linux-3.0.86/ $ cp tiny4412_android_defconfig .config $

setsockopt呼叫IP_ADD_MEMBERSHIP出錯errno:19 no such device

   if (setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)) < 0) {          &nbs

Qt程式i18n的實現(從C++到Qt

嘿嘿,本文只是試圖從純C++的角度告訴你 Qt 的國際化是到底是怎麼一回事(注:本文只看一個點,不看面)。而不會一步一步告訴你Qt的國際化/本地化怎麼用(這些東西在Qt Manual、論壇 以及 相關書籍中介紹的夠多了)。 Qt 國際化所做的就是這點東西: 首先,提取要翻譯的字串,手動

QT---QApplication的解釋

1、QApplication QApplication類管理GUI程式的控制流和主要設定,是基於QWidget的,為此特化了QGuiApplication的一些功能,處理QWidget特有的初始化和結束收尾工作。  對於使用了Qt的任何GUI程式來說,不管何時何地有多少個W

Spring依賴注入DI/控制反轉IOC

首先提問, 什麼是 Spring IOC 容器?         Spring 框架的核心是 Spring 容器。容器建立物件,將它們裝配在一起,配置它們並管理它們的完整生命週期。Spring 容器使用依賴注入來管理組成應用程式的元件。容器通過讀取提供的配置元資料來接收物件