6、Qt Creator項目創建


1、新建一個項目

  單擊 Qt Creator 的菜單項文件->新建文件或項目,出現如圖 1 所示的對話框。在這個對話框里選擇需要創建的項目或文件的模板。

新建文件或項目對話框
                         圖 1 新建文件或項目對話框

  Qt Creator 可以創建多種項目,在最左側的列表框中單擊“Application”,中間的列表框中列出了可以創建的應用程序的模板,各類應用程序如下:

  • Qt Widgets Application,支持桌面平台的有圖形用戶界面(Graphic User Interface,GUI) 界面的應用程序。GUI 的設計完全基於 C++ 語言,采用 Qt 提供的一套 C++ 類庫。
  • Qt Console Application,控制台應用程序,無 GUI 界面,一般用於學習 C/C++ 語言,只需要簡單的輸入輸出操作時可創建此類項目。
  • Qt Quick Application,創建可部署的 Qt Quick 2 應用程序。Qt Quick 是 Qt 支持的一套 GUI 開發架構,其界面設計采用 QML 語言,程序架構采用 C++ 語言。利用 Qt Quick 可以設計非常炫的用戶界面,一般用於移動設備或嵌入式設備上無邊框的應用程序的設計。
  • Qt Quick Controls 2 Application,創建基於 Qt Quick Controls 2 組件的可部署的 Qt Quick 2 應用程序。Qt Quick Controls 2 組件只有 Qt 5.7 及以后版本才有。
  • Qt Canvas 3D Application,創建 Qt Canvas 3D QML 項目,也是基於 QML 語言的界面設計,支持 3D 畫布。

  在圖 1 顯示的對話框中選擇項目類型為 Qt Widgets Application 后,單擊“Choose…”按鈕,出現如圖 2 所示的新建項目向導:

新建項目向導第 1 步:項目名稱和項目存儲位置設置
       圖 2 新建項目向導第 1 步:項目名稱和項目存儲位置設置

  在圖 2 中,選擇一個目錄,如“E:\QtDemo”,再設置項目名稱為 Demo,項目名稱中間不能有空格和中文。 這樣新建項目后,會在“E:\QtDemo”目錄下新建一個目錄,項目所有文件保存在目錄“E:\QtDemo\Demo\”下,項目保存目錄也不能有中文。

  在圖 2 中設置好項目名稱和保存路徑后,單擊“Next”按鈕,出現如圖 3 所示的選擇編譯工具的界面:


             圖 3 新建項目向導第 2 步:選擇編譯工具

  可以將這幾個編譯工具都選中,在編譯項目時再選擇一個作為當前使用的編譯工具,這樣可以編譯生成不同版本的可執行程序。

         圖 4 新建項目想到第 3 步:選擇界面基類

  在圖 3 顯示的界面中單擊“Next”按鈕,出現如圖 4 所示的界面。在此界面中選擇需要創建界面的基類(base class),有 3 種基類可以選擇:

  (1)QMainWindow 是主窗口類,主窗口具有主菜單欄、工具欄和狀態欄,類似於一般的應用程序的主窗口;

  (2)QWidget 是所有具有可視界面類的基類,選擇 QWidget 創建的界面對各種界面組件都可以 支持;

  (3)QDialog 是對話框類,可建立一個基於對話框的界面;

  三者之間的關系:QWidget為QMainWindow和QDialog的父類。

  在此選擇 QMainWindow 作為基類,自動更改的各個文件名不用手動去修改。勾選“創建界面”復選框。這個選項如果勾選,就會由 Qt Creator 創建用戶界面文件,否則,需要自己編程手工創建界面。初始學習,為了了解 Qt Creator 的設計功能,勾選此選項。

  然后單擊“Next”按鈕,出現一個頁面,總結了需要創建的文件和文件保存目錄,單擊“完成”按鈕就可以完成項目的創建。

  QMainWindow類:

  MainWindow的結構分為五個部分:菜單欄(Menu Bar)、工具欄(Toolbars)、停靠窗口(Dock Widgets)、狀態欄(Status Bar)和中央窗口(Central Widget)。可以用下面的圖形表示之。

  我們仔細看看這個窗口。雖然不太明顯,但它實際上分成了幾個部分:
在這里插入圖片描述

  主窗口的最上面是 Window Title,也就是標題欄,通常用於顯示標題和控制按鈕,比如最大化、最小化和關閉等。通常,各個圖形界面框架都會使用操作系統本地代碼來生成一個窗口。所以,你會看到在 KDE 上面,主窗口的標題欄是 KDE 樣式的;在 Windows 平台上,標題欄是 Windows 風格的。如果你不喜歡本地樣式,比如 QQ 這種,它其實是自己將標題欄繪制出來,這種技術稱為 DirectUI,也就是無句柄繪制,這不在本文的討論范疇。Window Title 下面是 Menu Bar,也就是菜單欄,用於顯示菜單。窗口最底部是 Status Bar,稱為狀態欄。當我們鼠標滑過某些組件時,可以在狀態欄顯示某些信息,比如瀏覽器中,鼠標滑過帶有鏈接的文字,你會在底部看到鏈接的實際 URL。

  除去上面說的三個橫向的欄,中間是以矩形區域表示。我們可以看出,最外層稱為 Tool Bar Area,用於顯示工具條區域。之所以是矩形表示,是因為,Qt 的主窗口支持多個工具條。你可以將工具條拖放到不同的位置,因此這里說是 Area。我們可以把幾個工具條並排顯示在這里,就像 Word2003 一樣,也可以將其分別放置,類似 Photoshop。在工具條區域內部是 Dock Widget Area,這是停靠窗口的顯示區域。所謂停靠窗口,就像 Photoshop 的工具箱一樣,可以停靠在主窗口的四周,也可以浮動顯示。主窗口最中間稱為 Central Widget,就是我們程序的工作區。通常我們會將程序最主要的工作區域放置在這里,類似 Word 的稿紙或者 Photoshop 的畫布等等。

  對於一般的 Qt 應用程序,我們所需要做的,就是編寫我們的主窗口代碼,主要是向其中添加各種組件,比如菜單、工具欄等,當然,最重要的就是當中的工作區。當我們將這些都處理完畢之后,基本上程序的工具也可以很好地實現。

  通常我們的程序主窗口會繼承自QMainWindow,以便獲得QMainWindow提供的各種便利的函數。這也是 Qt Creator 生成的代碼所做的。

2、項目的文件組成和管理

  完成了以上新建項目的步驟后,在 Qt Creator 的左側工具欄中單擊“編輯”按鈕,可顯示如圖 5 所示的窗口。

 項目管理與文件編輯界面
                 圖 5 項目管理與文件編輯界面

  窗口左側有上下兩個子窗口,上方的目錄樹顯示了項目內文件的組織結構,顯示當 前項目為 Demo。項目的名稱構成目錄樹的一個根節點,Qt Creator 可以打開多個項目,但是只有一個活動項目,活動項目的項目名稱節點用粗體字體表示。

  (1)widget類

  該項目包含以下一些文件:

    項目組織文件project.pro,存儲項目設置的文件

    主程序入口文件main.cpp,實現main()函數的程序文件。

    窗體界面文件widget.ui,一個XML格式存儲的窗體上的元件及布局的文件。

    widget.h是所設計的窗體類的頭文件,widget.cpp是widget.h里定義類的實現文件。在C++里,任何窗體或界面組件都是用類封裝的,一個類一般有一個頭文件(.h文件)和一個源程序文件(.cpp文件)。

#-------------------------------------------------
#
# Project created by QtCreator 2021-07-18T23:38:48
#
#-------------------------------------------------

QT       += core gui //表示加入core gui模塊,core gui是QT用於GUI設計的類庫模塊,如果是創建的控制台應用程序,就不需要加入core gui.
//QT類庫以模塊的形式組織各種功能的類,根據項目涉及的功能需求,在項目中添加適當的類庫模塊支持。例如,如果項目中使用到了涉及數據庫操作的類就需要用到sql模塊,在.pro文件中需要增加如下一行:QT +=sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets//條件執行語句,表示當QT主版本大於4時加入widgets

TARGET = project//表示生成的目標可執行文件的名稱,即編譯后的可執行文件為project.exe
TEMPLATE = app//表示項目使用的模板是app,是一般的應用程序

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

CONFIG += c++11     //C++ 11

//SOURCES、HEADERS、FORMS記錄了項目中包含的源程序文件、頭文件和窗體文件的名稱
SOURCES += \
        main.cpp \
        widget.cpp

HEADERS += \
        widget.h

FORMS += \
        widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

 

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

 

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

 

#include "widget.h"
#include <QApplication>//包含一個應用程序類的頭文件



int main(int argc, char *argv[])    //main程序入口   argc命令行變量的數量   argv命令行變量的數組
{
    QApplication a(argc, argv);     //定義並創建應用程序  a:應用程序對象,在QT中應用程序對象有且只有一個
    Widget w;                       //定義並創建窗口對象     MainWindow類 ->父類QMainWindow
    w.show();                       //窗口對象默認不會顯示,必須要調用show方法顯示窗口

    return a.exec();                //讓應用程序對象進入消息循環,防止界面一閃而過,等待並處理用戶對界面的操作,處理用戶的消息,代碼會一直阻塞在這里
}


#include "mainwindow.h"
#include <QApplication>//包含一個應用程序類的頭文件


//main程序入口   argc命令行變量的數量   argv命令行變量的數組
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);//a  應用程序對象,在QT中應用程序對象有且只有一個

    MainWindow w;//窗口對象     MainWindow類 ->父類QMainWindow
    w.show();//窗口對象默認不會顯示,必須要調用show方法顯示窗口

    return a.exec();//讓應用程序對象進入消息循環,防止界面一閃而過,等待並處理用戶對界面的操作,處理用戶的消息,代碼會一直阻塞在這里
}

  (2)mainwindow類

  在項目名稱節點下面,分組管理着項目內的各種源文件,幾個文件及分組分別為以下幾項:

  • Demo.pro 是項目管理文件,包括一些對項目的設置項。
  • Headers 分組,該節點下是項目內的所有頭文件(.h),圖 5 中所示項目有一個頭文件 mainwindow.h,是主窗口類的頭文件。
  • Sources 分組:該節點下是項目內的所有 C++源文件(.cpp),圖 5 中所示項目有兩個 C++ 源文件,mainwindow.cpp 是主窗口類的實現文件,與 mainwindow.h 文件對應。main.cpp 是主函數文件,也是應用程序的入口。
  • Forms 分組:該節點下是項目內的所有界面文件(.ui)。圖 5 中所示項目有一個界面文件mainwindow.ui,是主窗口的界面文件。界面文件是文本文件,使用 XML 語言描述界面的組成。
Demo.pro
#------------------------------------------------- # # Project created by QtCreator 2021-04-23T21:43:27 # #------------------------------------------------- QT += core gui //表示加入core gui模塊,core gui是QT用於GUI設計的類庫模塊,如果是創建的控制台應用程序,就不需要加入core gui. //QT類庫以模塊的形式組織各種功能的類,根據項目涉及的功能需求,在項目中添加適當的類庫模塊支持。例如,如果項目中使用到了涉及數據庫操作的類就需要用到sql模塊,在.pro文件中需要增加如下一行:QT +=sql greaterThan(QT_MAJOR_VERSION, 4): QT += widgets //條件執行語句,表示當QT主版本大於4時加入widgets TARGET = demo     //表示生成的目標可執行文件的名稱,即編譯后的可執行文件為demo.exe TEMPLATE = app //表示項目使用的模板是app,是一般的應用程序 # The following define makes your compiler emit warnings if you use # any feature of Qt which has been marked as deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 CONFIG += c++11 //C++ 11 //SOURCES、HEADERS、FORMS記錄了項目中包含的源程序文件、頭文件和窗體文件的名稱 SOURCES += \ main.cpp \ mainwindow.cpp HEADERS += \ mainwindow.h # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target

 

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>


//MainWindow繼承與QMainWindow
class MainWindow : public QMainWindow
{
    Q_OBJECT//宏   使用信號與槽機制時必須加入該宏

public:
    MainWindow(QWidget *parent = nullptr);//構造函數
    ~MainWindow();//析構函數
};

#endif // MAINWINDOW_H

 

mainwindow.cpp

#include "mainwindow.h" //構造函數 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { } //析構函數 MainWindow::~MainWindow() { }

 

main.cpp

#include "mainwindow.h"
#include <QApplication>//包含一個應用程序類的頭文件


//main程序入口   argc命令行變量的數量   argv命令行變量的數組
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);//a  應用程序對象,在QT中應用程序對象有且只有一個

    MainWindow w;        //窗口對象     MainWindow類 ->父類QMainWindow
    w.show();          //窗口對象默認不會顯示,必須要調用show方法顯示窗口

    return a.exec();      //讓應用程序對象進入消息循環,防止界面一閃而過,等待並處理用戶對界面的操作,處理用戶的消息,代碼會一直阻塞在這里
}

  左側上下兩個子窗口的顯示內容可以通過其上方的一個下拉列表框進行選擇,可以選擇的顯示內容包括項目、打開文檔、書簽、文件系統、類視圖、大綱等。在圖 5 中,上方的子窗口顯示了項目的文件目錄樹,下方顯示打開的文件列表。可以在下方選擇顯示類視圖,這樣下方則顯示項目內所有的類的結構,便於程序瀏覽和快速切換到需要的代碼位置。

  雙擊文件目錄樹中的文件mainwindow.ui,出現如圖 6 所示的窗體設計界面:

集成在 Qt Creator 中UI設計器
                             圖 6 集成在 Qt Creator 中UI設計器

  這個界面實際上是 Qt Creator 中集成的 Qt Designer。窗口左側是分組的組件面板,中間是設計的窗體。在組件面板的 Display Widgets 分組里,將一個Label組件拖放到設計的窗體上面。雙擊剛剛放置的 Label 組件,可以編輯其文字內容,將文字內容更改為“Hello, World!”。還可以在窗口右下方的屬性編輯器里編輯標簽的 Font 屬性,Point Size(點大小)更改為 12,勾選粗體。

3、項目的編譯、調試與運行

  單擊主窗口左側工具欄上的“項目”按鈕,出現如圖 7 所示的項目編譯設置界面。

項目編譯器選擇和設置界面
                                     圖 7 項目編譯器選擇和設置界面

  界面左側一欄的“Build & Run”下面顯示了本項目中可用的編譯器工具,要使用哪一個編譯器用於項目編譯,單擊其名稱即可,選擇的編譯器名稱會用粗體字表示。這里選擇使用 MinGW 32bit 編譯器。

  每個編譯器又有 Build 和 Run 兩個設置界面。在 Build 設置界面上,有一個“Shadow build” 復選框。如果勾選此項,編譯后將在項目的同級目錄下建立一個編譯后的文件目錄,目錄名稱包含編譯器信息,這種方式一般用於使用不同編譯器創建不同版本的可執行文件。如果不勾選此項,編譯后將在項目的目錄下建立“Debug”和“Release”子目錄用於存放編譯后的文件。

  在設計完 mainwindow.ui 文件,並設置好編譯工具之后,就可以對項目進行編譯、調試或運行。主窗口左側工具欄下方有 4 個按鈕,其功能見表 1。

表 1 編譯調試工具欄按鈕的作用
圖標 作用 快捷鍵
彈出菜單選擇編譯工具和編譯模式,編譯工具分MinGW和MSVC兩種,編譯模式分 Debug、Profile或 Release模式  
直接運行程序,如果修改后未編譯,會先進行編譯。即使在程序中設置了斷點,此方式運行的程序也無法調試。 Ctrl+R
項目需要以Debug模式編譯,點此按鈕開始調試運行,可以在程序中設置斷點。若是以 Release模式編譯,點此按鈕也無法進行調試。 F5
編譯當前項目 Ctrl+B


  首先對項目進行編譯,沒有錯誤后,再運行程序。程序運行的界面如圖 8 所示。這就是一個標准的桌面應用程序,我們采用可視化的方式設計了一個窗口,並在上面顯示了字符串“Hello, World!”。

實例程序 Demo 運行時界面
       圖 8 實例程序 Demo 運行時界面

  在 Qt Creator 中也可以對程序設置斷點進行調試,但是必須以 Debug 模式編譯,並以“Start Debugging”(快捷鍵 F5)方式運行程序。

  注意,要在 Qt Creator 里調試 MSVC2015 編譯的程序,必須安裝 Windows 軟件開發工具包 SDK。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM