gpt4 book ai didi

c++ - 显示 QMessageBox 时如何防止双槽调用?

转载 作者:行者123 更新时间:2023-11-30 01:48:50 25 4
gpt4 key购买 nike

我已将 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
// [...]

我已经检查过双信号连接或连接到此插槽的不同事件,但这似乎不是问题所在。有人可以解释这里发生了什么以及如何预防吗?

最佳答案

editingFinished 被发出两次是一个 Qt 错误,你可以在这里阅读:

https://forum.qt.io/topic/39141/qlineedit-editingfinished-signal-is-emitted-twice

还描述了一个解决方法。

if(lineEdit->text().toDouble()<1000) {
lineEdit->blockSignals(true);
QMessageBox::information(this, "Information", "Incorrect value");
lineEdit->blockSignals(false);
}

关于c++ - 显示 QMessageBox 时如何防止双槽调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29803185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com