2010年9月13日 星期一

Qt4 學習筆記(二):Signal & Slot

  • 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()));
  1. connect()方法的第一個參數是發出Signal的物件之位址,第三個參數是對Signal有反應動作的物件之位址。
  2. SIGNAL()與SLOT()為巨集函式,是語法的一部份,所傳入的Signal或Slot為沒有參數名稱的函式簽名(function signature)。
  3. 程式中btn與app並不知道彼此的存在,而是藉由connect()連接Signal與Slot,這降低了物件之間的耦合度。

本文參考自"良葛格:Qt4學習筆記"

0 意見: