QPainter 在窗口获得/失去焦点时重绘

发布于 2024-11-26 12:59:50 字数 178 浏览 0 评论 0原文

我正在学习 Qt,并尝试使用 QPainter 为我的程序绘制一个简单的显示。

我绘制一次静态元素(框架等),然后只更新动态元素。

一切正常,除了窗口失去焦点时。一旦发生这种情况,整个区域就会被清除(动态元素继续像以前一样被绘制)。

是否可以阻止这种行为?如果没有,我如何确定窗口是否失去焦点?

I am learning Qt and am trying to paint a simple display for my program with QPainter.

I draw static elements (frames etc.) once and only update dynamic elements afterwards.

Everything works fine, except for when the window loses focus. As soon as that happens, the whole area is cleared (dynamic elements keeps being painted as before).

Is it possible to prevent this behaviour? If not, how do I determine if the window have lost focus?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

紫轩蝶泪 2024-12-03 12:59:50

当您的小部件未被覆盖时, paintEvent成员将被调用。传入的事件有一个 region() 成员,它告诉您应该重绘小部件的哪一部分。如果/必要时,您可以使用它来重绘静态部分。

When your widget is uncovered, the paintEvent member will be called. The event passed in has a region() member that tells you what part of the widget should be redrawn. You can use that to redraw the static parts if/when necessary.

靖瑶 2024-12-03 12:59:50

虽然我没有找到为什么屏幕被重新绘制,但是可以通过使用来触发焦点

eventFilter(QObject *, QEvent *event) {
if (event->type() == QEvent::ActivationChange){}
}

,并且可以从这里调用绘制函数。尽管必须添加一点延迟,因为触发器通常在窗口失去焦点之前触发(因此仍然清除重绘)。

While I did not find why the screen was repainted, the focus can be triggered by using

eventFilter(QObject *, QEvent *event) {
if (event->type() == QEvent::ActivationChange){}
}

and paint function can be called from here. Although a slight delay must be added, as the trigger usually fires before the window looses focus (hence still clearing the repaint).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文