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,滑鼠左擊進行關聯,跳出對話方塊後,選擇不同的功能
附:不建議使用,因為不易維護且不易辨別