更新
查看在Windows上使用模糊背景,了解使用Qt和DWM的示例。alt文本 http://labs.trolltech.com/blogs/wp-content/uploads/2009/09/blurbehind2.png
原问题:
我想要用Qt创建一个Windows Aero Glass窗口,现在它看起来像这样:
但是在调用了一些my_window->repaint()
之后,我的窗口标签就会变得不正常:
但现在如果我略微调整窗口的大小,它就会正确地重新绘制。
问题是:如何擦除窗口背景,以便小部件可以在干净的玻璃上绘制自己?
复现该问题的简短代码是(在具有Aero的Vista上):
class Window(QWidget):
def __init__(self, *args):
QWidget.__init__(self, *args)
self.setLayout(QVBoxLayout())
self.layout().addWidget(QLabel("This is the text"))
# let the whole window be a glass
self.setAttribute(Qt.WA_NoSystemBackground)
from ctypes import windll, c_int, byref
windll.dwmapi.DwmExtendFrameIntoClientArea(c_int(self.winId()), byref(c_int(-1)))
def mousePressEvent(self, event):
self.repaint()
现在您可以点击窗口,或者只需按下Alt-Tab
几次。
无论如何,在Aero Glass中使用标签不是我所需要的,因为QLabel不知道如何使用白色发光来绘制自己(如窗口标题)。我需要的是一种通用的方法来清除“玻璃”。