2.圖形界面名秀、對話框、信號與槽

一藕溅、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

布局
image.png

注意:窗口設(shè)計的代碼需要放在構(gòu)造函數(shù)中ui->setupUi(this);代碼后面攒发,不然會掛掉调塌。

TODO.png

Not TODO.png

二、對話框

  • 分類:模態(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)

image.png
  • 按需要選擇要生成的槽函數(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 )

在disconnect函數(shù)中0能用作一個通配符孕豹,分別表示所有信號涩盾、所有接收對象、接收對象中的所有槽函數(shù)励背。不過發(fā)射者sender不能為0春霍,其他三個參數(shù)的值能等于0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市叶眉,隨后出現(xiàn)的幾起案子址儒,更是在濱河造成了極大的恐慌,老刑警劉巖衅疙,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件莲趣,死亡現(xiàn)場離奇詭異,居然都是意外死亡饱溢,警方通過查閱死者的電腦和手機喧伞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绩郎,“玉大人潘鲫,你說我怎么就攤上這事±哒龋” “怎么了溉仑?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長兽愤。 經(jīng)常有香客問我彼念,道長挪圾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任逐沙,我火速辦了婚禮哲思,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吩案。我一直安慰自己棚赔,他們只是感情好,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布徘郭。 她就那樣靜靜地躺著靠益,像睡著了一般。 火紅的嫁衣襯著肌膚如雪残揉。 梳的紋絲不亂的頭發(fā)上胧后,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機與錄音抱环,去河邊找鬼壳快。 笑死,一個胖子當著我的面吹牛镇草,可吹牛的內(nèi)容都是我干的眶痰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼梯啤,長吁一口氣:“原來是場噩夢啊……” “哼竖伯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起因宇,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤七婴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后羽嫡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體本姥,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年杭棵,在試婚紗的時候發(fā)現(xiàn)自己被綠了婚惫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡魂爪,死狀恐怖先舷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情滓侍,我是刑警寧澤蒋川,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站撩笆,受9級特大地震影響捺球,放射性物質(zhì)發(fā)生泄漏缸浦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一氮兵、第九天 我趴在偏房一處隱蔽的房頂上張望裂逐。 院中可真熱鬧,春花似錦泣栈、人聲如沸卜高。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掺涛。三九已至,卻和暖如春疼进,著一層夾襖步出監(jiān)牢的瞬間薪缆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工伞广, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留矮燎,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓赔癌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親澜沟。 傳聞我的和親對象是個殘疾皇子灾票,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容