【发布时间】:2021-04-05 02:52:56
【问题描述】:
具体来说是在 Windows 7 上,虽然我认为这并不重要。
我们在无数桌面应用程序中都看到过这个问题,尤其是那些倾向于不使用操作系统提供的控件的游戏:当屏幕在静止的鼠标光标下以编程方式改变时(而不是用户将光标移动到新的小部件),他们不同步。光标没有改变,或者小部件没有像它应该在里面那样被绘制——显然小部件的mouse enter 事件没有被触发。如果您在不离开小部件的情况下稍微摇动鼠标,事情就会自行修复。
遗憾的是,Qt 5.7 也存在这个普遍存在的问题。想到的第一个解决方案是以编程方式将鼠标移动到 (0, 0) 并通过 Windows 方式返回。但是,它不是跨平台的(ish)。有更好的想法吗?
【问题讨论】:
-
“屏幕以编程方式更改”到底是什么意思?您在 Qt 中遇到的问题在哪里?
-
@Kamajii 我有一个继承自
QSplitter的拆分器,其中有一系列继承自QPanel的面板。每个面板都有一个关闭按钮。当用户单击此按钮时,面板将关闭,并且拆分器会调整其他面板的大小,以便新面板占用其空间。但是,对于现在位于鼠标光标下的这个新面板enterEvent()没有被调用并且面板被绘制错误。摇动鼠标会有帮助。 -
在鼠标下的widget上调用
QWidget::update能解决你的问题吗? -
@m7913d 是我尝试的第一件事。它没有。
-
你能在尽可能小的代码示例中重现并添加它吗?