Я подключил сигнал editFinished QLineEdit к слоту в моем приложении, показывающему 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
// [...]
Я уже проверил наличие двойных сигнальных соединений или различных событий, связанных с этим слотом, но, похоже, это не проблема. Может кто-нибудь объяснить, что здесь происходит и как это предотвратить?