蘭布達表達式(Lambda)
for(int i = 0; i < 5; i++)
{
QMessageBox *messageBox = new QMessageBox;
messageBox ->setText(QString::number(i));
messageBox ->setWindowModality(Qt::NonModal);
messageBox ->show();
qDebug() << "!!!!!!!!!!!!!! QMessageBox" << i << messageBox;
connect(messageBox, &QMessageBox::buttonClicked,[=](){
qDebug() << "!!!!!!!!!!!!!!QMessageBox connect " << messageBox->text() << messageBox ;
delete messageBox ;
});
}
創建完QMessageBox後,各個QMessageBox的地址和編號
點擊編號爲2的QMessageBox產生的信號打印的地址和編號
QObject::sender
其實用QObject的sender也可以,代碼如下
for(int i = 0; i < 5; i++)
{
QMessageBox *messageBox = new QMessageBox;
messageBox ->setText(QString::number(i));
messageBox ->setWindowModality(Qt::NonModal);
messageBox ->show();
qDebug() << "!!!!!!!!!!!!!! QMessageBox" << i << messageBox;
connect(messageBox , &QMessageBox::buttonClicked, this, &MainWindow::onMessageBox);
}
void MainWindow::onMessageBox()
{
QMessageBox *p = qobject_cast<QMessageBox *>(sender());
qDebug() << "!!!!!!!!!!!!!!QMessageBox connect " << p->text() << p;
}
但sender不能用在蘭布達表達式裏,否則得到的是nullptr。
這論壇討論方法也不錯,有興趣的可以去看下。
實際使用哪種方式看個人了,我習慣用蘭布達表達式,因爲方便編寫。如有什麼問題,歡迎評論探討