程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 【Qt】2.2 繼續了解信號和槽,qt2.2了解信號

【Qt】2.2 繼續了解信號和槽,qt2.2了解信號

編輯:C++入門知識

【Qt】2.2 繼續了解信號和槽,qt2.2了解信號


槽和普通成員函數一樣,可以是虛函數、被重載,可以是公有、私有、保護的。它可以被其它C++成員函數調用。

槽連接了信號,當發射這個信號時,槽會被自動調用。

連接函數:

bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionTypetype = Qt::AutoConnection )

sender和receiver是指向QObject的指針。

signal和method是不帶參數名的函數,需要使用宏SIGNAL()和SLOT()。

 

一個信號可以連接多個槽,例如:

connect(okButton, SIGNAL(clicked(bool)),

    checkBox1, SLOT(click()));

connect(okButton, SIGNAL(clicked(bool)),

     checkBox2, SLOT(click()));

當點擊okButton時,checkBox1和checkBox2都會執行各自的槽click()。

 

多個信號可以連接同一個槽,例如:

connect(okButton, SIGNAL(clicked(bool)),

checkBox1, SLOT(click()));

connect(cancelButton, SIGNAL(clicked(bool)),

     checkBox1, SLOT(click()));

點擊okButton或cancelButton時,checkBox1都會執行槽click()。

 

一個信號可以與另個一個信號連接,例如:

connect(okButton, SIGNAL(clicked(bool)),

    checkBox1, SLOT(click()));

connect(cancelButton, SIGNAL(clicked(bool)),

     okButton, SIGNAL(clicked(bool)));

當點擊cancelButton時,會由okButton的信號clicked(bool)做響應,okButton會發射信號clicked(bool),從而checkBox1的槽click()會自動執行。

另外,cancelButton的信號clicked(bool)中的bool參數會傳遞給okButton的信號clicked(bool)中的bool參數。

在這裡okButton的clicked(bool)信號被當作槽來使用,槽中有多少個參數,就會要求發射信號的函數至少要帶有多少個參數,否則連接是不成功的。

 

連接可以被移除,例如:

connect(okButton, SIGNAL(clicked(bool)),

    checkBox1, SLOT(click()));

 

disconnect(okButton, SIGNAL(clicked(bool)),

     checkBox1, SLOT(click()));

當刪除對象時,Qt會自動刪除與這個對象相關的所有連接。

 

 

信號的參數數量至少是槽的參數數量。

1.例如:

connect(okButton, SIGNAL(clicked(bool)),

    checkBox1, SLOT(click()));

當發射信號時,信號的bool參數是沒有用的。

 

2.例如:

connect(okButton, SIGNAL(clicked(bool)),

checkBox1, SLOT(setHidden(bool));

當發射信號時,信號的bool參數會傳遞給槽的bool參數。

 

3.例如:

connect(checkBox1, SIGNAL(released()),

cancelButton, SLOT(setVisible(bool)));

這是錯誤的,槽要求一個bool參數,信號也必須有這一個bool參數。

 

4.例如:

connect(this, SIGNAL(send(bool, int, double)),

     this, SLOT(recive(bool, int)));

信號的參數個數可以大於等於槽的參數個數,同時信號和槽的各個參數位置需要對應。

在這裡,信號的第三個參數double類型不會被傳遞到槽。

 

 

在成員函數中手動發射信號,使用emit,例如:

在對象創建時,構造函數就已經連接了setVal信號和recive槽。

當對象調用SetValue()函數時,全發射setVal信號,同時傳入相應的參數值,發射信號之後會由recive槽接收,設置val變量的值。

 

 

好咯,這一節的總結就到這裡~

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved