2011-07-27 39 views
1

我正在学习Qt,并试图用QPainter为我的程序绘制一个简单的显示画面。QPainter重绘窗口获得/失去焦点

我画了一次静态元素(框架等),之后只更新动态元素。

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

可以防止这种行为吗?如果不是,我该如何确定窗口是否失去了焦点?

回答

0

虽然我没有找到为什么屏幕被重新粉刷,重点可以通过使用

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

和油漆的功能可以从这里被称为被触发。尽管必须添加轻微的延迟,因为触发器通常会在窗口失焦之前触发(因此仍会清除重新绘制)。

1

当您的小部件被发现时,将会调用paintEvent成员。传入的事件有一个region()成员,该成员告诉您应该重绘部件。如果需要,您可以使用它来重新绘制静态部分。

+0

那么我使用的区域,这就是为什么只有活动部分重绘。我想知道为什么在改变焦点的时候整个区域都被清除了,以及如果不可能防止清除,如何触发改变以进行完全重新绘制。 – proarunas