QT獲取信號的發送者

蘭布達表達式(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的地址和編號
各個QMessageBox的地址和編號
點擊編號爲2的QMessageBox產生的信號打印的地址和編號
刪除了編號爲2的窗口
在這裏插入圖片描述

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。

論壇討論方法也不錯,有興趣的可以去看下。

實際使用哪種方式看個人了,我習慣用蘭布達表達式,因爲方便編寫。如有什麼問題,歡迎評論探討

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