显示 QMessageBox 会破坏 QLineEdit 的高亮显示

Showing a QMessageBox breaks QLineEdit highlighting

我有一个为 Raspberry Pi 编写的 C++ Qt 4 应用程序。我在显示 QMessageBox 时遇到了一个奇怪的副作用,而且我对 Qt 的了解还不足以调试它。

pi 有一个触摸屏,所以我启动应用程序时很整洁,隐藏了鼠标光标。 (虽然这不会影响我的问题......我已经尝试过以防万一。)

我对 QLineEdit 进行了子类化,以在 LineEdit 获得焦点时将 focusInEvent() 和 focusOutEvent() 覆盖为 select-all,在失去焦点时将 deselect-all 覆盖。

显示任何 QMessageBoxes 之前,一切正常 - 点击 QLineEdit selects 所有文本;点击下一个 de-selects 以前的 QLineEdit,selects 新的 QLineEdit。

显示 QMessageBox 后,我覆盖的事件停止工作,并且 QLineEdits 不再自动 select 和 de-select.

如果我添加:

msgBox.setWindowFlags(msgBox.windowFlags() | Qt::Popup);

在我 exec() QMessageBox 之前,文本突出显示继续正常工作,但是当 QMessageBox 在屏幕上时,光标显示 并且闪烁

显示 QMessageBox 似乎有副作用影响调用 window 和我的子类 QLineEdit 框...但如果 QMessageBox 设置了 Popup 标志则不会!

我已经尝试在主 window 上存储并手动重新加载标志,但这没有任何作用,所以它似乎不是主 window 上的标志。

还有一个奇怪的地方:如果我 运行 通过 XMing 和 SSH 远程应用程序,一切正常......只有当它 运行 在 Pi 上本地使用普通的旧 X11 时,它才会怪异出来了。

关于如何调试它有什么想法吗?谢谢!

我可以通过做两件事来解决这个问题。

首先,我在打开之前更新了 QMessageBox 的标志:

msgBox.setWindowFlags(Qt::Popup);
msgBox.exec();

其次,我将光标隐藏在 Qt 代码中,而不是依赖于 Unclutter;这解决了闪烁的光标问题:

QApplication::setOverrideCursor(Qt::BlankCursor);