(1條消息) 編寫第一個Qt程序

創建一個按鈕


先編寫一個按鈕程序。以初步瞭解 Qt Creator 設計應用程序的基本過程,對使用 Qt Creator 編寫 Qt C 應用程序建立初步的瞭解。

新建一個項目

單擊 Qt Creator 的菜單項文件->新建文件或項目,出現如圖 1 所示的對話框。在這個對話框裡選擇需要創建的項目或文件的模板。
(1條消息) 編寫第一個Qt程序,在這裡插入圖片描述,第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條消息) 編寫第一個Qt程序,在這裡插入圖片描述,第2张
圖 2 新建項目向導第 1 步:項目名稱和項目存儲位置設置

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

在圖 2 中設置好項目名稱和保存路徑後,單擊“Next”按鈕,出現如圖 3 所示的選擇編譯工具的界面:
(1條消息) 編寫第一個Qt程序,在這裡插入圖片描述,第3张
圖 3 新建項目向導第 2 步:選擇編譯工具

可以將這幾個編譯工具都選中,在編譯項目時再選擇一個作為當前使用的編譯工具,這樣可以編譯生成不同版本的可執行程序。
(1條消息) 編寫第一個Qt程序,在這裡插入圖片描述,第4张
(1條消息) 編寫第一個Qt程序,在這裡插入圖片描述,第5张
圖 4 新建項目想到第 3 步:選擇界面基類

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

  1. QMainWindow 是主窗口類,主窗口具有主菜單欄、工具欄和狀態欄,類似於一般的應用程序的主窗口;
  2. QWidget 是所有具有可視界面類的基類,選擇 QWidget 創建的界面對各種界面組件都可以 支持;
  3. QDialog 是對話框類,可建立一個基於對話框的界面;

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

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

項目的文件組成和管理

完成瞭以上新建項目的步驟後,在 Qt Creator 的左側工具欄中單擊“編輯”按鈕,可顯示如圖 5 所示的窗口。
(1條消息) 編寫第一個Qt程序,在這裡插入圖片描述,第6张
(1條消息) 編寫第一個Qt程序,在這裡插入圖片描述,第7张
圖 5 項目管理與文件編輯界面

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

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

  • Demo.pro 是項目管理文件,包括一些對項目的設置項。
  • Headers 分組,該節點下是項目內的所有頭文件(.h),圖 5 中所示項目有一個頭文件 - --mainwindow.h,是主窗口類的頭文件。
  • Sources 分組:該節點下是項目內的所有 C 源文件(.cpp),圖 5 中所示項目有兩個 C 源文件,mainwindow.cpp 是主窗口類的實現文件,與 mainwindow.h 文件對應。main.cpp 是主函數文件,也是應用程序的入口。
  • Forms 分組:該節點下是項目內的所有界面文件(.ui)。圖 5 中所示項目有一個界面文件mainwindow.ui,是主窗口的界面文件。界面文件是文本文件,使用 XML 語言描述界面的組成。

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

雙擊文件目錄樹中的文件mainwindow.ui,出現如圖 6 所示的窗體設計界面:
(1條消息) 編寫第一個Qt程序,在這裡插入圖片描述,第8张
圖 6 集成在 Qt Creator 中UI設計器

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

項目的編譯、調試與運行

單擊主窗口左側工具欄上的“項目”按鈕,出現如圖 7 所示的項目編譯設置界面。
(1條消息) 編寫第一個Qt程序,在這裡插入圖片描述,第9张
圖 7 項目編譯器選擇和設置界面

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

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

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

(1條消息) 編寫第一個Qt程序,在這裡插入圖片描述,第10张
首先對項目進行編譯,沒有錯誤後,再運行程序。程序運行的界面如圖 8 所示。這就是一個標準的桌面應用程序,我們采用可視化的方式設計瞭一個窗口,並在上面顯示瞭字符串“Hello, World!”。
現在先不考慮可視化的窗口學習.
(1條消息) 編寫第一個Qt程序,在這裡插入圖片描述,第11张
在 Qt Creator 中也可以對程序設置斷點進行調試,但是必須以 Debug 模式編譯,並以“Start Debugging”(快捷鍵 F5)方式運行程序。

程序調試的方法與一般 IDE 工具類似,不再詳述。註意,要在 Qt Creator 裡調試 MSVC2015 編譯的程序,必須安裝 Windows 軟件開發工具包 SDK。

1、設置主窗口標題的函數

(1條消息) 編寫第一個Qt程序,在這裡插入圖片描述,第12张

2、解決按鈕亂碼

(1條消息) 編寫第一個Qt程序,在這裡插入圖片描述,第13张

3、查找按鈕函數

(1條消息) 編寫第一個Qt程序,在這裡插入圖片描述,第14张
(1條消息) 編寫第一個Qt程序,在這裡插入圖片描述,第15张

案例

widget的構造函數中:

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //this  代表當前主窗口
    //設置標題
    this->setWindowTitle("第一個窗口");

    //固定窗口(不可拖動)
    //this->setFixedSize(800,600);
    //設置窗口大小(可拖動)
    this->resize(800,600);
    
    //在窗口上放一個按鈕
    //創建一個button控件
    //parent父對象為this 表明 主窗口 將來接管button
    //因為我希望將button放到當前窗口中 this代表當前窗口
    QPushButton *button = new QPushButton("戳我呀",this);

    QPushButton *button1 = new QPushButton("咬我呀",this);
    //默認控件會顯示到主窗口的左上方
    //移動按鈕
    button1->move(400,300);
}

註意:"對象數"的概念

在 Qt 中創建對象的時候會提供一個 Parent 對象指針,下面來解釋這個 parent
到底是幹什麼的。
  • QObject 是以對象樹的形式組織起來的。
  • 當你創建一個 QObject 對象時,會看到 QObject 的構造函數接收一個QObject 指針作為參數,這個參數就是 parent,也就是父對象指針。

在創建QObject對象時,可以提供一個其父對象,我們創建的這個QObject對象會自動添加到其父對象的children()列表。
當父對象析構的時候,這個列表中的所有對象也會被析構。(註意,這裡的父對象並不是繼承意義上的父類!)
我們也可以自己刪除子對象,它們會自動從其父對象列表中刪除

(1條消息) 編寫第一個Qt程序,在這裡插入圖片描述,第16张

建議:從堆區申請空間 而不是從棧區。

QWidget window;
QPushButton quit("Quit", &window);

入棧順序:window先 quit後 彈棧先調用quit的析構 就會將quit從windos的孩子列表刪除,然後windwos調用析構,由於孩子列表中沒有對象,就不會再次去釋放quit

.
如果是以下這種情況就會調用兩次析構

QPushButton quit("Quit");
QWidget window;
quit.setParent(&window);

入棧順序:先入 quit 後window 先調用window析構—>查看window的孩子列表 調用quit的析構。然後quit出棧 也會調用quit的析構。所以quit被調用瞭兩次析構。

在 Qt 中,盡量在構造的時候就指定 parent 對象,並且大膽在堆上創建.

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复