Update
см. Использование Blur Behind в Windows для примера использования Qt и DWM. alt text http://labs.trolltech.com/blogs/wp-content/uploads/2009/09/blurbehind2.png
Оригинальный вопрос:
Я хочу создать окно Windows Aero Glass с Qt, теперь оно выглядит так:
Но после вызова некоторого my_window->repaint()
моя метка окна будет нарушена:
Но теперь , если я немного изменил размер окна, он будет правильно перерисовываться.
Вопрос: как стереть фон окна, чтобы виджеты рисовали себя на чистом стекле?
Короткий код для воспроизведения проблемы (Vista с Aero):
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 не знает, как рисовать себя с помощью свечения (например, название окна). Мне нужен общий способ очистки "стекла".