目錄
-
- 建立新項目
- 添加控件 button按鈕
- 給控件綁定信号與槽
- 單擊Button彈出子視窗(非模态)
- 單擊Button彈出子視窗(模态)
最近可能會做一些測試工具,于是想到了帶GUI界面的QT,正好是C++語言開發比較熟悉,這裡就記錄下學習過程,QT+VS2017的安裝和配置就不說了,網上一搜一大把,本篇作為開篇主要記錄下如何用VS建立新的QT項目以及基本的添加控件并且綁定處理函數的流程(QT裡面好像是叫做信号與槽的連接配接)
建立新項目
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLxkkeNNTQq1UeRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL5MDO5IzMyMTMxEDMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
一會要弄個子視窗出來,是以這裡起名就叫QtFather吧
然後一路Next就好,建立出來後解決方案的目錄結構是這樣的
簡單介紹下:
- QtFather.ui 編輯UI界面的,輕按兩下打開會出現Qt設計師視窗,裡面會有一些控件提供給我們使用
QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗 - QtFather.h和QtFather.cpp就是我們的主視窗類了 預設啟動會彈出這個視窗來
QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗 - main.cpp就是主函數入口了,這個暫時不多說
- QtFather,也就是主視窗類中預設有個成員變量 Ui::QtFatherClass ui; 這裡面包含了UI界面上的各種控件對象,一會會用到,可以F12進去看看
QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗
添加控件 button按鈕
- 輕按兩下QtFather.ui 進入Qt設計師界面 左面欄目找到Push Button控件,直接拖進視窗即可
QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗 - 輕按兩下控件給控件改名,右側是控件資訊,objectName就是這個控件的類名,編譯後會在代碼中展現
QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗 - 儲存後關閉,然後右鍵QfFather.ui編譯一下(剛開始弄的時候竟然不知道還要編譯…搞了半天:)
QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗 - 編譯後F12檢視UI_QtFatherClass類會發現多了這個控件的變量,這樣就能用了
QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗
給控件綁定信号與槽
- 剛添加好的控件,在QT中是不會自動給你綁定相關的處理函數的,還需要手動的綁定一下,先在視窗類中定義下pushButton的處理函數(名字随意)
QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗 - 然後在父視窗類的構造中調用connect函數進行綁定,也就是說一旦産生了clicked信号就調用pushButton_slots()函數
connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(pushButton_slots()));
注:避免和linux socket函數中的connect沖突,網絡連接配接函數可以::connect(fd,…)這樣用
單擊Button彈出子視窗(非模态)
- 右鍵FormFiles,添加新視窗
QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗 - 選擇Qt GUI Class,一路next即可
QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗 - 在父視窗中添加子視窗頭檔案 并定義子視窗的類指針
QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗 - 然後在剛剛給控件注冊的回調函數中new一個子視窗類出來,并調用子視窗的show函數顯示即可
QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗 - 避免記憶體洩漏,預設關閉子視窗是不會銷毀這個類對象的
- 是以要加上pSon->setAttribute(Qt::WA_DeleteOnClose);
單擊Button彈出子視窗(模态)
首先還是重複上面操作,綁定一個button,然後在button單擊的處理動作上添加如下代碼
setWindowModality的幾個參數選項含義:
Qt::NonModal :該視窗不是模态,不會阻塞其它界面接受輸入資訊;
Qt::WindowModal:該視窗是一個當以層次的模态視窗,會阻塞它的父視窗、祖父視窗和各個兄弟視窗接受輸入資訊
Qt::ApplicationModal:該視窗是應用模态視窗,會阻塞所有視窗接受輸入資訊。
注意:本文建立新視窗的方式,從代碼角度上QtSon和QtFather是沒有任何父子關系的,是以說Qt::WindowModal并不會阻塞QtFather視窗,如果加入父子關系可以在new QtSon(Parent)傳入參數指定該視窗的父視窗
這樣也可以實作模态視窗