Обновление
см. Использование 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 не знает, как рисовать себя при помощи свечения (как заголовок окна). Что мне нужно, так это общий способ очистки "стакана".