天天看點

QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗

目錄

    • 建立新項目
    • 添加控件 button按鈕
    • 給控件綁定信号與槽
    • 單擊Button彈出子視窗(非模态)
    • 單擊Button彈出子視窗(模态)

最近可能會做一些測試工具,于是想到了帶GUI界面的QT,正好是C++語言開發比較熟悉,這裡就記錄下學習過程,QT+VS2017的安裝和配置就不說了,網上一搜一大把,本篇作為開篇主要記錄下如何用VS建立新的QT項目以及基本的添加控件并且綁定處理函數的流程(QT裡面好像是叫做信号與槽的連接配接)

建立新項目

QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗

一會要弄個子視窗出來,是以這裡起名就叫QtFather吧

然後一路Next就好,建立出來後解決方案的目錄結構是這樣的

QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗

簡單介紹下:

  • QtFather.ui 編輯UI界面的,輕按兩下打開會出現Qt設計師視窗,裡面會有一些控件提供給我們使用
    QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗
  • QtFather.h和QtFather.cpp就是我們的主視窗類了 預設啟動會彈出這個視窗來
    QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗
  • main.cpp就是主函數入口了,這個暫時不多說
  • QtFather,也就是主視窗類中預設有個成員變量 Ui::QtFatherClass ui;
    QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗
    這裡面包含了UI界面上的各種控件對象,一會會用到,可以F12進去看看

添加控件 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,…)這樣用

QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗

單擊Button彈出子視窗(非模态)

  • 右鍵FormFiles,添加新視窗
    QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗
  • 選擇Qt GUI Class,一路next即可
    QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗
  • 在父視窗中添加子視窗頭檔案 并定義子視窗的類指針
    QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗
  • 然後在剛剛給控件注冊的回調函數中new一個子視窗類出來,并調用子視窗的show函數顯示即可
    QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗
  • 避免記憶體洩漏,預設關閉子視窗是不會銷毀這個類對象的
  • 是以要加上pSon->setAttribute(Qt::WA_DeleteOnClose);

單擊Button彈出子視窗(模态)

首先還是重複上面操作,綁定一個button,然後在button單擊的處理動作上添加如下代碼

QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗

setWindowModality的幾個參數選項含義:

Qt::NonModal :該視窗不是模态,不會阻塞其它界面接受輸入資訊;

Qt::WindowModal:該視窗是一個當以層次的模态視窗,會阻塞它的父視窗、祖父視窗和各個兄弟視窗接受輸入資訊

Qt::ApplicationModal:該視窗是應用模态視窗,會阻塞所有視窗接受輸入資訊。

注意:本文建立新視窗的方式,從代碼角度上QtSon和QtFather是沒有任何父子關系的,是以說Qt::WindowModal并不會阻塞QtFather視窗,如果加入父子關系可以在new QtSon(Parent)傳入參數指定該視窗的父視窗

QT+VS2017學習筆記一:添加控件 連接配接信号與槽 點選控件按鈕彈出子視窗

這樣也可以實作模态視窗

繼續閱讀