Qt信號模型:函數
Qt封裝了具體操做系統的消息機制ui
Qt遵循進店的GUI消息驅動事件模型this
Qt中系統消息概念:spa
信號(Signal)——由操做系統產生的消息操作系統
槽(Slot)——程序中的消息處理函數code
連接(Connect)——將系統消息綁定到信息處理函數對象
信號與槽 核心函數 QObject::connect 函數blog
bool connect(const QObject* sender, //發送對象事件
const char* signal, //消息名稱字符串
const QObject* receiver,//接受對象
const char* method, //接受對象的成員函數
Qt::ConnectionType type = Qt::AutoConnection );
在Qt中,消息用字符串進行描述
connect函數在消息名和處理函數之間創建映射
Qt中的新關鍵字
SIGNAL——用於指定消息名
SLOT——用於指定消息處理函數名
Q_OBJECT——全部自定義槽的類必須在類聲明的開始處加上Q_OBJECT
slots——用於在類中聲明消息處理函數
實驗: 經過實現一個QPushButton 控件關閉應用
代碼:
QApplication a(argc, argv); QPushButton b ;//定義一個QPushButton 對象b b.setText("click me to quit");//設置按鈕顯示字符 b.show();//顯示按鈕 /*將QPushButton 對象b 的點擊事件與 QApplication a的退出操做進行綁定 功能: 按鈕按下關閉應用 */ QObject::connect(&b,SIGNAL(clicked()),&a,SLOT(quit()));//將按鈕點擊事件與應用關閉事件進行鏈接 return a.exec();
自定義槽:
只有QObject的子類才能自定義槽
定義槽的類必須在聲明的最開始處使用Q_OBJECT
類中聲明槽時須要使用slots關鍵字
槽與所處理的信號在函數名上必須一致
SIGNAL和SLOT所指定的名稱中:
——能夠包含參數類型
——不能包含具體的參數名
自定義槽實驗:定義按鈕槽函數並鏈接
自定義槽須要知足上述條件。
代碼:
修改類定義
class QCalculatorUI : public QWidget { Q_OBJECT private: QLineEdit* m_eidt; QPushButton* m_buttons[20]; QCalculatorUI();//使用二階構造 構造函數爲私有 bool conststruct();//二階構造函數 private slots: void onButtonsClickde(); public: static QCalculatorUI* NewInstance();//入口函數 void show(); ~QCalculatorUI(); };
實現槽函數:
void QCalculatorUI::onButtonsClickde() { QPushButton* buttons = (QPushButton*)sender(); qDebug()<<"onButtonsClickde"; qDebug()<<buttons->text(); }
創建鏈接:
connect( m_buttons[i*5 + j],SIGNAL(clicked()),this,SLOT(onButtonsClickde()));//按鈕與槽函數進行鏈接
運行結果: