1. 程式人生 > >Qt和Qt creater 一些細微的小差別

Qt和Qt creater 一些細微的小差別

最近,專案方面需要將一個原本用VS+Qt開發的介面移植到Qt Creator上面。在這個過程中遇到了一些bug然後不斷debug,打算把它們分點寫下來,希望對有同樣需求的朋友能有一些幫助。

目前Qt的開發環境一般有兩種,一種是直接使用Qt Creator(下稱為“前者”),而另外一種是使用VS+Qt(下稱為“後者”)進行開發。在我們的專案中,考慮到前者可以跨平臺,比較方便開發,所以我們才有了移植程式碼的打算。

下面我分點敘述過程中發現的關於兩種開發環境的一些小差異:

1、關於介面檔案.ui構建的標頭檔案的include位置

在前者中,介面檔案構建的標頭檔案(比如:addressbook.ui對應的ui_addressbook.h),在相應的addressbook.cpp中包含(#include "ui_addressbook.h")。而後者則是在addressbook.h檔案中(#include "ui_addressbook.h")。所以有時候在前者的addressbook.h檔案中使用一些類的時候,需要注意一下是否已經將該類所在的標頭檔案include進來了。

2、關於定義介面類例項(*ui或者ui)的形式

下面是我在兩個專案中的截圖,分別使用前者和後者開發。

前者預設定義介面類的指標*ui:


後者預設定義介面類的變數ui:


所以在呼叫ui的成員函式以及成員變數的時候,前者只能使用“->”,而後者可以使用“.”和“->”。

3、使用資料庫以及xml類

在我們的專案中,使用到了資料庫相關以及和xml檔案操作相關的類。

對於前者,需要在.pro檔案中新增QT+=sql和QT+=xml,並include相應的標頭檔案即可。

而對於後者,不需要在.pro檔案中新增語句,但是,在新建專案的時候應該勾選相應的選項如下圖:


按照上圖新建之後,右鍵專案屬性,檢視附屬依賴項,就會看到添加了相應的.lib檔案:

這裡需要強調另外的一個問題,這裡的.lib都是以d結尾的,也就是說,都是用於Debug模式下的,如果要使用Release模式下的,還需要新增去掉d的.lib(新增的方法很簡單,直接在已有的.lib下面輸入即可),比如:


確定之後,就可以在後者隨意使用Debug和Release兩種模式了。

4、使用OpenCV

要想使用OpenCV,當然最最首先是需要下載OpenCV庫。

在前者,使用OpenCV,需要在.pro檔案中新增如下語句:

  1. INCLUDEPATH+=D:\Work_Software\OpenCV3.1\opencv\build\include  
  2. LIBS+=D:\Work_Software\OpenCV3.1\opencv\build\x64\vc12\lib\*.lib  


當然,等號右邊的路徑得改成你電腦上的opencv相應的include和lib資料夾的路徑。

而在VS+Qt中使用OpenCV的方法,和在VS中配置OpenCV的方法是一樣的,可以直接新增相應的屬性表,或者再次對專案進行配置。具體的可以參考我另外的一片博文:


5、關於當前路徑

比如,有這樣的一句程式碼:

  1. Mat img = imread("me.jpg");  
想要讀入一張名稱為me的,jpg檔案,那麼應該將檔案放在什麼位置呢?

對於前者來說,

如果是在Debug模式下,則預設的當前目錄是與工程檔案在同一資料夾下的類似於“build-Test_Project-Desktop_Qt_5_7_0_MSVC2013_64bit-Debug”命名格式的檔案。

如果是在Release模式下,則預設的當前目錄是與工程檔案在同一資料夾下的類似於“build-Test_Project-Desktop_Qt_5_7_0_MSVC2013_64bit-Release”命名格式的檔案。

也就是說,需要將me.jpg放在相應的資料夾下面,不然是讀不進來的。

而對於後者來說,

當前目錄指的是專案資料夾。



還有,之前一直很好奇#include <QLabel>和#include “qlabel.h”這兩種形式有什麼區別,後來直接開啟QLabel檔案,發現裡面有且僅有一句程式碼:沒錯,就是:#include “qlabel.h” 。。。 。。。

以上就是我移植過程中發現的兩者的一些小區別,希望能給有需要的朋友一些幫助。