1. 程式人生 > >Qt5.4中遇到找不到標頭檔案等。。

Qt5.4中遇到找不到標頭檔案等。。

從新學習Qt時,重灌了Qt5.4,當執行Hello World例子時,遇到了下列的情況  

<span style="font-size:18px;">#include <QApplication>
#include <QDialog>
#include <QLabel>

int main(int argc, char *argv[])
{
    QApplication a(argc,argv);
    QDialog w;
    QLabel label(&w);
    label.setText("Hello World! i am QT");
    w.show();
    return a.exec();
}
</span>
提示錯誤找不到:
#include<QApplication>
#include<QDialog>
#include<QLabel>
一直糾結了快一天網上也找不到答案,摸索了很久,最後發現是出現原因:Qt5後不再用QtGui模組,而是使用QtWidgets模組。
所以在.pro檔案中新增
greaterThan(QT_MAJOR_VERSION,4):QT+=widgets
完美解決問題。。。。

順便總結相關問題:

遇到的問題如下:

1.  由於Qt5將大部分桌面部件移到了Qt Widgets模組中,所以在.pro中要增加下面一行

QT += widgets

2. 程式中使用了OWC10,用到了ActiveQt,原來的做法是在.pro中加CONFIG += qaxcontainer,現在需要改成

QT += axcontainer

當然了,原來的CONFIG += qaxcontainer也將去除

3. 為了充分使用C++11特性,在.pro中加下面一行

CONFIG += c++11

4. 在原始檔中,凡是涉及到原QtGui中可視部件的,全要修改標頭檔案引用,或者增加QtWidgets標頭檔案,比如:

#include <QtGui/QPushButton>  要改成  #include <QPushButton>  或者  #include <QtWidgets/QPushButton>

在以前使用#include <QtGui>的地方,要加上 #include <QtWidgets>

5. 由於Qt5去除了QTextCodec::setCodecForCStrings()函式,所以在涉及到在cpp中直接寫漢字的情況,有如下兩種修改方法:

a)  如果以前的原始檔編碼是GBK的,則需要使用QString::fromLocal8Bit()函式將原來的漢字括起來;或者直接將原始檔編碼轉換成UTF-8的(缺點是MSVC編譯器不能方便的使用了)。我使用了使用QString::fromLocal8Bit()來呼叫的方式(當然了,另寫便捷函式或巨集來處理)

b) 如果以前的原始檔編碼是UTF-8的,則什麼都不用動。

6. 以前使用QDesktopServices::storageLocation(QDesktopServices::xxxx)來獲取一些系統目錄,現在則要改成

QStandardPaths::writableLocation(QStandardPaths::xxxx)

7. 以前呼叫QFileDialog::getSaveFileName()時,如果在Windows下使用Native Dialog形式指定檔名,則能正常顯示,如今Qt5不能正常顯示檔名。所以將它的後兩個引數加上了,即QFileDialog::getSaveFileName(xxx, xxx, xxx, xxx, 0, QFileDialog::DontUseNativeDialog),這樣就正常了,只是它的對話方塊不是系統形式的,暫且將就吧。

8. 還有,Qt5解決了ui_qaxselect.h檔案的問題。在Qt4時代,使用ActiveQt時,老提示沒有這個檔案,需要自己找到原始碼手工uic qaxselect.ui > ui_qaxselect.h來生成一下,Qt5中則解決了該問題。

9.使用到列印相關的類,Qt5單獨放到了QtPrintSupport模組中,所以得加標頭檔案#include <QtPrintSupport>,在.pro中要加QT += printsupport

10. 使用到QWebPage等webkit相關可視部件的,Qt5單獨放到了QtWebKitWidgets模組中,所以得加標頭檔案#include <QtWebKitWidgets>,在.pro中要加QT += webkitwidgets

11. Qt4中的cleanlooks、plastique、cde、motif等主題樣式沒有,新加了個fusion,好吧,問題是我的一個專案框架使用的是cleanlooks主題樣式然後加自定義樣式表,這下可好,升級Qt5後,樣子有的就與windowsvista或fusion不相符或有缺陷,得調整一下了。所以,對主題樣式依賴比較嚴重的程式,要衡量一下是否要升級到Qt5了。

12. .pro檔案中的TARGET在Qt4(qmake v2)中是可以不填寫的,那麼它就從自動採用.pro檔名字,而在Qt5中(qmake v3)這個TARGET不可不寫。

13. Q_WS_XX的巨集不可用了,使用Q_OS_XX代替.


相關推薦

Qt5.4遇到檔案

從新學習Qt時,重灌了Qt5.4,當執行Hello World例子時,遇到了下列的情況   <span style="font-size:18px;">#include <QApplication> #include <QDialog>

檔案的巨集定義 檔案的巨集定義

標頭檔案中的巨集定義     程式碼: 1 #ifndef DSP_ADC_BSP_H_ //防止標頭檔案被重複包含 2 #define DSP_ADC_BSP_H_ 3 4 #ifdef _DSP_

網上檔案

ACM標頭檔案 #include <iostream> #include <stdio.h> #include <string.h> #include <stack> #include <queue> #includ

關於字元驅動的變數,巨集,檔案的簡介 module_init module_exit

  ssize_t second_drv_read(struct file *file, char __user *buf, size_t size, loff_t *ppos) { } 這是一個檔案讀函式  ssize_t是signed size_t,size_t是標準C庫中定義的

C語言自帶的檔案(.h)所包含的函式

由於之前沒有好好學習過C語言,所以對其自帶標頭檔案所包含的內容總是不清楚,每次寫程式碼都是盲目的#include很多.h,現在重新整理一下,發現了不少很好的函式,以方便複習查閱。 不完全統計,C語言標

Mac OS 下解決Clion能用檔案的方法

  首先,Mac OS 自帶的g++編譯器版本比較低,許多c++的新特性都不支援,所以可以先在終端下下載g++ 的新版本,如g++7,代開Clion後在preference裡找到Cmake並修改引數如

VS2012如何在解決方案包含預設的檔案目錄

大家安裝完vs2012後,最讓人困惑的是原先的解決方案中包含預設標頭檔案不知道跑哪去了。只能在每個專案屬性中新增,這樣是很麻煩的。 那vs2012應該如何新增啦,步驟如下:        1.新建一個解決方案。        2.檢視---->屬性管理        

C++對於類來說檔案(.h)和原始檔(.cpp)都應該寫些什麼 (類的常規建立)

    寫類的宣告(包括類裡面的成員和方法的宣告)、函式原型、#define常數等,但一般來說不寫出具體的實現。     在寫標頭檔案時需要注意,在開頭和結尾處必須按照如下樣式加上預編譯語句(如下): #ifndef CIRCLE_H#define CIRCLE_H//你的程式碼寫在這裡#endif

c++的預編譯檔案問題

環境:VS2008 語言:C++      下午出了一個非常可惡的問題,我的一個基於MFC 對話方塊的程式因為預編譯標頭檔案stdafx.h的原因始終無法編譯通過。 由於程式整體是需要預編譯標頭檔案的。因此工程內所有cpp檔案通通都包括了#include stdafx.h。      我自己寫的檔案放在工程

VS關於預編譯檔案的介紹

預編譯標頭檔案的原理: 在DXUT.cpp裡include一次DXUT.h,生成一次pch,pdb檔案,其他地方實際上直接用這個編譯的結果,從而減少編譯時間,提高編譯效率。一般,我們把常用的不變的庫標頭檔案放裡面,如,atlbase.h,atlcore.h,window

GCC使用預編譯檔案

既使用過 Microsoft? Visual C++? 又使用過 GNU CC 的網友一定會感受到兩者編譯速度的差異,尤其是對於 wxWidgets 這樣標頭檔案內容多

Debian安裝核心以及檔案

在Debian上安裝vmware server的時候,發現沒有核心的標頭檔案。用了apt-get install linux-headers-2.6.18-4的debian包以後,安裝不了。用了uname -a發現執行的系統核心是2.6.18-3.於是需要升級核心版本。使用如

C語言 makefile檔案檔案的寫法

makefile 檔案的書寫。 總結下make 執行過程       1)make 在當前目錄下找 "Makefile"或"makefile"的檔案     2)如果找到,則會找檔案中第一個目標檔案(target)。     3)如果 main 命令的執行,依賴後面命令執

ubuntu檔案term.h和curses.h的解決方法

創建於 2012-05-16 收藏自個人的百度空間 -------------------------------- 當/usr/include中沒有term.h和curses.h時,包含這兩個標頭檔案的程式會如下報錯: term.h: 沒有那個檔案或目錄 curses.h

關於VisualStudio2015到stdio.c檔案的解決辦法

 在利用VS2015編寫C程式程式碼時,通常要包含stdio.h這類標頭檔案,但在VS2015中卻報錯,這是怎麼回事呢? 原因就出在:stdio.h這些標頭檔案沒有所在路徑不在VS2015的預設路徑內,從而導致VS2015找不到這些標頭檔案,其中一種解決辦法如下: (1

ios React-Native 之 檔案

我的解決辦法有點簡單暴力: 將package.json中的"react"直接改成16.2.0, react-native 改成了0.53.3,如下: "dependencies": {     "react": "16.2.0",     "re

mac 下 clang++ 檔案 stdlib.h

因為要用 openmp庫,用 clang++ 編譯 c++程式,出現瞭如下報錯: clang++ xx.cpp -o xx -fopenmp /usr/local/Cellar/llvm/7.0.0/include/c++/v1/stdlib.h:94:15: fatal error: 'std

android studio ndk生成h檔案到類的問題)

今天在學習android studio的ndk程式設計時遇到了些阻力,再用javah命令生成h標頭檔案時總是失敗,還是沒什麼基礎,網上可以找到許多許多的方法,我只能說總有一款適合你,慢慢試,我的方法如下:在android studio中的teriminal視窗中輸入set classpath=E:\

檔案能定義變數

標頭檔案中定義全域性變數會出現的問題 =====本文轉載的,在工作中,很受用,特此記錄之。====== 直接在標頭檔案中定義全域性變數,然後有多個檔案包含這個標頭檔案時,編譯通過不了,提示重複定義變數! 在標頭檔案中定義全域性變數時前面加上關鍵字static,此時編譯會通過但是此時全域性

Ubuntu下cmake後,make時報錯到自己寫的檔案

首先要把main.cpp和xxx.h,xxx.c放在同一個資料夾下(方便起見)。 然後在cmakelists.txt如下(cmakelists不需要提及標頭檔案,因為這裡標頭檔案和原始檔在同一個路徑) cmake_minimum_required(VERSION 2.8.3) proje