Qt編程之自定義信號與槽(二)

以下程序在vs2010+qt插件中運行正確。

一、只自定義槽

格式:

1.在.h文件中定義如下

private slots:  //實際這是一個宏

      type slotName(arg);//和普通的成員函數一樣,需要在.cpp文件中寫其實現

2.在.cpp中寫其實現

    type ClassName::slotName(arg)

  {

     //你的實現

  }

3.在.cpp中的構造函數中調用connect函數,該函數是QObject類的靜態方法

ClassName::ClassName()

{

    ui.setup();

    QObject::connect(sender,SIGNAL(你要使用的信號),rece,SLOT(slotName(arg));

}


二、既定義信號也定義槽

需注意的幾點:

1.自定義的信號不需要在.cpp中實現,只需在.h中有聲明即可,否則會報如下錯誤:error LNK2005: "protected: void __thiscall ClassName::signalName(參數)" (?signalName@ClassName@@IAEXVQString@@@Z) 已經在 moc_signal_slot.obj 中定義
1>Q:\VS2010Projects\Qt\Signal_Slot\Win32\Debug\\Signal_Slot.exe : fatal error LNK1169: 找到一個或多個多重定義的符號

2.發射信號使用emit


例子:現在通過點擊一個按鈕,改變窗口的標題,但通過發射自定義信號的方法

1.在.h文件中定義如下:

private slots:

   void changeWindowTitle(QString title);//真正用來改變窗口標題的槽

  void on_clickButton_Slot();//用來響應按鈕clicked信號的槽,在其中發射自定義信號titleMessageSignal

signals:

  void titleMessageSignal(QString title);//自定義的信號,帶參數

2.在.cpp文件中實現如下:

void ClassName::changeWindowTtile(QString title)

{

   this->setWindowTtile(title);

}


void ClassName::on_clickButton_Slot()

{

   emit this->titleMessageSIgnal("你想要使用的窗口標題");//發射信號

}

在構造函數中調用connect

QObject::connect(this,SIGNAL(tithleMessageSignal(QString),this,SLOT(changeWindowTitle(QString));



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章