在Qt的開發過程中,信號帶參數是很常見的,在使用帶參數的信號槽時,有以下幾點需要注意。
- 當信號和槽函數的參數數量相同時,它們的參數類型要完全一致。
信號和槽函數的聲明:
signals:
void iSignal(int b);
void strSignal(QString str);
public slots:
void iSlots(int b);
void strSlots(QString str);
信號和槽函數的綁定:
connect(this,SIGNAL(iSignal(int)),
this,SLOT(iSlots(int)));
connect(this,SIGNAL(strSignal(QString)),
this,SLOT(strSlots(QString)));
發射信號:
emit iSignal(5);
emit strSignal("hello word");
槽函數的實現:
void MainWindow::iSlots(int b)
{
qDebug() << "b = " << b;
}
void MainWindow::strSlots(QString str)
{
qDebug() << str;
}
- 當信號的參數與槽函數的參數數量不同時,只能是信號的參數數量多於槽函數的參數數量,且前面相同數量的參數類型應一致,信號中多余的參數會被忽略。
信號:
void iSignal(int b,int a);
響應信號的槽函數:
void MainWindow::iSlots(int b)
{
qDebug() << "b = " << b;
}
- 在不進行參數傳遞時,信號槽綁定也是要求信號的參數數量大於等於槽函數的參數數量,這種情況一般是一個帶參數的信號去綁定一個無參數的槽函數。
信號:
void iSignal(int b,int a);
響應信號的槽函數:
void iSlots();
信號和槽函數的綁定:
connect(this,SIGNAL(iSignal(int,int)),
this,SLOT(iSlots()));
- 參考資料:
1 http://blog.csdn.net/lyc_daniel/article/details/12047819 《信號槽如何傳遞參數(或帶參數的信號槽)》