1. 程式人生 > >QT學習day02---圖形介面、對話方塊、訊號與槽

QT學習day02---圖形介面、對話方塊、訊號與槽

一、QT圖形介面

①QT座標軸
起點:左上角
X:橫軸
Y:縱軸

②QWidget、QDialog、QMainWindow的異同點
QWidget:視窗為空,什麼內容都沒有
QMainWindow:含有選單欄,狀態列,工具欄等…已經包含了QWidget
QDialog:對話方塊(訊息對話方塊,檔案對話方塊等)

③編碼設定
Windows下需要設定,Linux下不需要設定
在這裡插入圖片描述

④QMainWindow視窗
選單欄(Menu Bar)
工具欄(ToolBars)
浮動部件(Duck Widgets)
主視窗(Central Widget)
狀態列(Status Bar)
在這裡插入圖片描述

注意:視窗設計的程式碼需要放在建構函式中ui->setupUi(this);程式碼後面

二、對話方塊

分為:模態對話方塊、非模態對話方塊、半模態對話方塊
對話方塊的操作函式:

#include <QDialog>//標頭檔案
setWindowTitle("視窗名");//設定對話方塊標題名
resize(寬,高);  //設定對話方塊的視窗大小
setModal(true/false);  //設定對話方塊是否為模態
show();  //顯示對話方塊
exec();  //等待操作

①模態對話方塊
(1)概念:此對話方塊未關閉時,不能對此應用中的其他視窗進行操作
(2)使用:創造對話方塊物件後,與exec();配合使用
程式執行到exec();時,如果不對對話方塊進行操作,後面的程式碼不會執行

QDialog *dlg = new QDialog(&w);//建立對話方塊物件,引數:父視窗
dlg->setWindowTitle(QStringLiteral("模態對話方塊"));
dlg->exec();  //exec:視窗等待結束(點選確定或關閉)

②非模態對話方塊
概念:此對話方塊未關閉時,還可以對此應用中的其他視窗進行操作
使用:對話方塊關閉前,使用show();

QDialog *dlg = new QDialog(&w);
dlg->setWindowTitle(QStringLiteral("非模態對話方塊"));
dlg->show();

③半模態對話方塊
適用於有進度條的操作
(1)概念:也是模態的一種,此對話方塊未關閉時,也不允許對此應用的其他視窗進行操作
(2)使用:呼叫setModal(true);或者setWindowModality();後,然後再show();

QDialog* dlg=new QDialog(&w);
dlg->setWindowTitle(QStringLiteral("半模態對話方塊"));
dlg->setModal(true);
dlg->show();

與exec();的區別:exec();需要程式返回一個值才可以繼續執行後面的程式碼,
而半模態show();函式後面的程式碼已經執行了

三、訊號與槽

①概念:在Qt中使用訊號和槽機制來完成物件之間的協同操作(訊號和槽都是函式)
②三種方式實現訊號與槽:
(1)自動關聯
在ui介面建立時,右擊轉到槽,然後選擇訊號,會自動建立一個槽函式
在這裡插入圖片描述
在這裡插入圖片描述
建立訊息後,會響應產生對應的槽函式,函式名一般以on_開頭

//此案例產生的槽函式,就可以在此槽函式中做一系列操作
private slots:
    void on_pushButton_clicked();

(2)connect()關聯

connect()
//引數:1.發射者 2.訊號函式 3.接收者  4.槽函式

注意:訊號函式與槽函式的引數必須一致

訊號函式:只需要定義,不需要實現,沒有實體
槽函式:響應函式,需要實現功能

例:定義了一個按鈕pushButton,定義了一個編輯框lineEdit
1.使用系統定義的訊號函式

//在槽中定義槽函式
private slots:
    void pushButton(bool);
    
//實現槽函式
void MainWindow::pushButton(bool)
{
    ui->lineEdit->setText("100");
}

//在建構函式中使用connect()函式
引數:1.按鈕變數 2.預設的按鈕的訊號函式clicked 3.接受者為自身 4.槽函式
connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(pushButton(bool)));

2.使用自定義的訊號函式
需要在自定義的環境條件下發射訊號:emit+訊號函式

//在訊號中定義一個訊號函式
signals:
    void pushButtonSignal();

//在槽中定義槽函式
private slots:
	void pushButtonSlot(bool);//一個含有傳送訊號的函式
    void pushButtonMySlot();
    
//實現槽函式
void MainWindow::pushButtonSlot(bool value)
{
    emit pushButtonSignal();//傳送訊號
}
void MainWindow::pushButtonMySlot()
{
    QMessageBox::aboutQt(this);  //彈出一個對話方塊
}

//使用connect()函式
//原理:當執行pushButtonSlot函式時,發射訊號,connect()接受並執行pushButtonMySlot()函式
connect(this, SIGNAL(pushButtonSignal()), this, SLOT(pushButtonMySlot()));

(3)在ui設計中關聯
在ui介面,按下F4,滑鼠左擊進行關聯,跳出對話方塊後,選擇不同的功能
附:不建議使用,因為不易維護且不易辨別
在這裡插入圖片描述
在這裡插入圖片描述