如果输入以某种方式意外,我已将 QLineEdit 的 editingFinished 信号连接到我的应用程序中显示 QMessageBox 的插槽。奇怪的是,消息框显示了两次,所以我在执行它的地方放置了一个断点并查看了堆栈跟踪。那里 QMessageBox.exec() 调用 QApplication::processEvents() 似乎以某种方式转发并再次处理相同的事件。
我的堆栈跟踪第一次看起来像这样:
MyApp::mySlot()
QLineEdit::editingFinished()
QGuiApplicationPrivate::processMouseEvent()
QEventLoop::processEvents()
QApplication::exec()
第二次是这样的:
MyApp::mySlot()
QLineEdit::editingFinished()
QGuiApplicationPrivate::processWindowSystemEvent()
QEventLoop::processEvents()
QDialog::exec()
// stack trace of run #1 here
// [...]
我已经检查了双信号连接或连接到此插槽的不同事件,但这似乎不是问题。有人可以解释这里发生了什么以及如何防止它吗?