Qt 信號與槽

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關鍵字

  槽與所處理的信號在函數名上必須一致

  SIGNALSLOT所指定的名稱中:

  ——能夠包含參數類型

  ——不能包含具體的參數名

自定義槽實驗:定義按鈕槽函數並鏈接

  自定義槽須要知足上述條件。

  代碼:

  修改類定義

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()));//按鈕與槽函數進行鏈接

運行結果:

  

相關文章
相關標籤/搜索