- use Signal & Slot
- 運用按鈕關閉視窗
在Qt之中,當某個元件發生狀態改變,而另一個元件想得知其狀態改變時,作出一些相對應行為的話,可以使用Signal與Slot的機制來達到。
Signal與Slot之間,可透過QObject的靜態方法connect來連結,Signal與Slot之間的處理是同步的(Synchronized)。
#include <QApplication> #include <QPushButton> #include <QFont> int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton *btn = new QPushButton("Close"); btn->setWindowTitle("Signal & Slot"); btn->setFont(QFont("Courier", 18, QFont::Bold)); btn->resize(200, 50); QObject::connect(btn, SIGNAL(clicked()), &app, SLOT(quit())); btn->show(); return app.exec(); }
Notes:
QObject::connect(btn, SIGNAL(clicked()), &app, SLOT(quit()));
- connect()方法的第一個參數是發出Signal的物件之位址,第三個參數是對Signal有反應動作的物件之位址。
- SIGNAL()與SLOT()為巨集函式,是語法的一部份,所傳入的Signal或Slot為沒有參數名稱的函式簽名(function signature)。
- 程式中btn與app並不知道彼此的存在,而是藉由connect()連接Signal與Slot,這降低了物件之間的耦合度。
本文參考自"良葛格:Qt4學習筆記"
0 意見:
張貼留言