アップデート
Qt とDWMの使用例については、 「 Using Blur Behind on Windows 」を参照してください。代替テキスト http://labs.trolltech.com/blogs/wp-content/uploads/2009/09/blurbehind2.png
元の質問:
Qt で Windows Aero Glass ウィンドウを作成したいのですが、次のようになります。
しかし、いくつかを呼び出した後my_window->repaint()
、ウィンドウのラベルが壊れます:
しかし、ウィンドウのサイズを少し変更すると、適切に再描画されます。
問題は、ウィンドウの背景を消去して、ウィジェットがきれいなガラスに自分自身をペイントするようにするにはどうすればよいかということです。
問題を再現するための短いコードは次のとおりです (Vista with 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 は (ウィンドウのタイトルのように) しばらく光って自分自身をペイントする方法を知らないからです。私が必要としているのは、「ガラス」をきれいにする一般的な方法です。