一藕溅、QT圖形界面
-
QT坐標軸:
X:橫軸
Y:縱軸
image.png QWidget匕得、QDialog、QMainWindow的區(qū)別
QWidget:窗口為空蜈垮,什么內(nèi)容都沒有
QMainWindow:含有menu bar耗跛,status bar,tools bar等
QDialog:對話框-
設(shè)置編碼方式linux除外
編碼.png QMainWinodw
菜單欄--Menu Bar
工具欄--ToolBars
浮動部件--Duck Widgets
主窗口--Central Widget
狀態(tài)欄--Status Bar
注意:窗口設(shè)計的代碼需要放在構(gòu)造函數(shù)中ui->setupUi(this);代碼后面攒发,不然會掛掉调塌。
二、對話框
- 分類:模態(tài)對話框惠猿,非模態(tài)對話框羔砾,半模態(tài)對話框
//Moldal Dialog
QDialog * Qdlg=new QDialog(&w);//w:parent window
Qdlg->resize(200,300);
Qdlg->setWindowTitle(QStringLiteral("Modal Dialog"));
Qdlg->exec();
//Modeless Dialog
QDialog * Qdlg=new QDialog(&w);//w:parent window
Qdlg->resize(200,300);
Qdlg->setWindowTitle(QStringLiteral("Modeless Dialog"));
Qdlg->show();
//setModal(true/false)實現(xiàn)模態(tài)和非模態(tài)的轉(zhuǎn)化
Qdlg->setModal(false);
Qdlg->show();
三、信號與槽
概念:在Qt中使用信號和槽機制來完成對象之間的協(xié)同操作(信號和槽都是函數(shù))
信號:當某個信號對其客戶或所有者發(fā)生的內(nèi)部狀態(tài)發(fā)生改動,信號被一個對象發(fā)射姜凄。只有定義過這個信號的類及其派生類能夠發(fā)射這個信號政溃。
當一個信號被發(fā)射時,和其相關(guān)聯(lián)的槽將被即時執(zhí)行态秧,就象一個正常的函數(shù)調(diào)用相同董虱。信號-槽機制完全獨立于所有GUI事件循環(huán)。只有當所有的槽返回以后發(fā)射函數(shù)(emit)才返回申鱼。如果存在多個槽和某個信號相關(guān)聯(lián)愤诱,那么,當這個信號被發(fā)射時捐友,這些槽將會一個接一個地執(zhí)行淫半,不過他們執(zhí)行的順序?qū)?strong>隨機的、不確定的匣砖,我們不能人為地指定哪個先執(zhí)行科吭、哪個后執(zhí)行
槽:槽是普通的C++成員函數(shù),能被正常調(diào)用猴鲫,他們唯一的特別性就是非常多信號能和其相關(guān)聯(lián)对人。當和其關(guān)聯(lián)的信號被發(fā)射時,這個槽就會被調(diào)用变隔。槽能有參數(shù)规伐,但槽的參數(shù)不能有缺省值。
public slots:在這個區(qū)內(nèi)聲明的槽意味著所有對象都可將信號和之相連接匣缘。這對于組件編程非常有用猖闪,你能創(chuàng)建彼此互不了解的對象,將他們的信號和槽進行連接以便信息能夠正確的傳遞肌厨。
protected slots:在這個區(qū)內(nèi)聲明的槽意味著當前類及其子類能將信號和之相連接培慌。這適用于那些槽,他們是類實現(xiàn)的一部分柑爸,不過其界面接口卻面向外部吵护。
private slots:在這個區(qū)內(nèi)聲明的槽意味著只有類自己能將信號和之相連接。這適用于聯(lián)系非常緊密的類表鳍。
槽也能夠聲明為虛函數(shù)馅而,這也是非常有用的。
關(guān)聯(lián):通過調(diào)用QObject對象的connect函數(shù)來將某個對象的信號和另外一個對象的槽函數(shù)相關(guān)聯(lián)譬圣,這樣當發(fā)射者發(fā)射信號時瓮恭,接收者的槽函數(shù)將被調(diào)用
*函數(shù)定義:bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * member ) [static]
1.自動關(guān)聯(lián)
-
按需要選擇要生成的槽函數(shù):
image.png
- 系統(tǒng)自動生成槽函數(shù),一般以on為開頭
//此次自動生成的槽函數(shù)
private slots:
void on_pushButton_clicked();//Qt-defined slot
//槽函數(shù)用戶自己實現(xiàn)函數(shù)體
void MainWindow::on_pushButton_clicked(){}
2.利用connect()關(guān)聯(lián)
注意:信號函數(shù)與槽函數(shù)的參數(shù)必須一致厘熟,且都是自定義函數(shù)屯蹦。
信號函數(shù):只需要定義维哈,不需要實現(xiàn),沒有實體登澜。
槽函數(shù):響應(yīng)函數(shù)阔挠,需要實現(xiàn)功能。
//parameter : sender signal receiver slot
connect()
- 系統(tǒng)信號和用戶定義槽
//ui頭文件里
signals:
void pushButton2Signal();//user-defined signal
private slots:
void pushButton2Slot(bool checked);//usr-defined slot
//在ui構(gòu)造函數(shù)中實現(xiàn)connect關(guān)聯(lián)
//parameter : sender signal receiver slot
connect(ui->pushButton_2,SIGNAL(clicked(bool)),this,SLOT(pushButton2Slot(bool)));
- 用戶信號和槽
//ui頭文件
signals:
void pushButton2Signal();//user-defined signal
private slots:
void pushButtonMySlot();//user-defined slot
//在某函數(shù)體內(nèi)發(fā)射信號
emit pushButton2Signal();//emit user-defined signal
////在ui構(gòu)造函數(shù)中實現(xiàn)connect關(guān)聯(lián)
connect(this,SIGNAL(pushButton2Signal()),this,SLOT(pushButtonMySlot()));
3.斷開關(guān)聯(lián):
當信號和槽沒有必要繼續(xù)保持關(guān)聯(lián)時脑蠕,我們能使用disconnect函數(shù)來斷開連接
函數(shù)定義:bool QObject::disconnect ( const QObject * sender, const char * signal, const Object * receiver, const char * member ) [static]有三種情況必須使用disconnect()函數(shù):
(1):斷開和某個對象相關(guān)聯(lián)的所有對象购撼。這似乎有點不可理解,事實上谴仙,當我們在某個對象中定義了一個或多個信號份招,這些信號和另外若干個對象中的槽相關(guān)聯(lián),如果我們要切斷這些關(guān)聯(lián)的話狞甚,就能利用這個方法,非常之簡潔廓旬。
disconnect( myObject, 0, 0, 0 ) 或 myObject->disconnect()
(2):斷開和某個特定信號的所有關(guān)聯(lián)哼审。
disconnect( myObject, SIGNAL(mySignal()), 0, 0 ) 或 myObject->disconnect( SIGNAL(mySignal()) )
(3):斷開兩個對象之間的關(guān)聯(lián)。
disconnect( myObject, 0, myReceiver, 0 ) 或 myObject->disconnect( myReceiver )