【问题标题】:How to constantly track a QWidget's global position如何不断跟踪 QWidget 的全局位置
【发布时间】:2016-05-20 14:20:44
【问题描述】:

总之

我意识到我可以使用mapToGlobal(...) 来获取小部件相对于屏幕的位置,我想在它发生变化时进行跟踪。

长篇

QWidget 相对于其父级移动时有一个QMoveEvent,但当一个小部件相对于屏幕移动时没有QEvent

有几种方法可以在不触发事件的情况下相对于屏幕移动;如果任何共享一个共同父级的小部件被移动或调整大小,或者如果窗口框架发生变化。

我尝试过的

目前我正在过滤特定小部件祖先的所有移动和调整大小事件,但是兄弟姐妹或阿姨/叔叔也很容易导致全局位置发生变化,我不想跟踪我项目中的每个小部件为了一个人......

我觉得必须有更好的方法,但我已经验证没有事件可以通过测试捕获,我在文档中看不到任何内容,也找不到任何其他人问同样的问题.. .

【问题讨论】:

    标签: qt widget


    【解决方案1】:

    您需要跟踪兄弟姐妹是不正确的。您确实需要跟踪所有祖先的位置。这并不难。

    【讨论】:

    • 我正在使用QMdiSubWindow,据我所知,这都是QWidgets,更改标题栏高度移动了小部件,但没有一个父母更新......也许它是那么风格问题呢?
    • @Troyseph 我不明白您所说的“父母都没有更新”是什么意思。当然,父小部件不会改变,但QMdiSubWindowgeometry() 已经改变,但它的pos() 没有改变。请发布您遇到问题的完整代码示例和/或详细说明您想到的确切场景。无法跟踪小部件的框架大小变化,但内容(geometry())相对于父级和/或屏幕保持固定,视情况而定。
    • 这正是我的问题,the position of the parent widgets didn't change, however the absolute position of the child did 基本上我无法检测到屏幕绝对位置的变化。我不是在尝试解决我给出的示例,而是在尝试准确计算出我需要跟踪的内容以实现绝对屏幕位置跟踪。
    • @Troyseph 我仍然不知道你的问题是什么。如果父链上的任何小部件的geometry 确实相对于屏幕发生了变化,那么您的小部件已经移动。如果没有,那就没有。如果您另有声明,您必须发布一个反例,因为这将是一个 Qt 错误。
    • 我在上面,代码是一个非常大的项目的一部分,所以创建一个反例可能需要一段时间。希望在执行此操作时,我们的代码中的错误对我来说很明显!
    猜你喜欢
    • 2013-07-29
    • 2010-11-23
    • 2014-03-04
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多