如何在PyQt中正确绘制非客户区(如TitleBar)?

时间:2014-06-30 23:00:00

标签: qt pyqt qmainwindow

我正在为Windows环境开发一个PyQt应用程序(不需要跨平台),我需要为QMainWindow实例创建自定义标题栏。有建议使用self.setWindowFlags(Qt.FramelessWindowHint),但它会在最大化时产生不希望的应用效果。实际上,有一种解决方案我认为是这种情况的完美解决方案,即按照this page中的描述绘制NCA(非客户区)。

目前,这是我的代码:

class MainWindow(QMainWindow, Ui_MainWindow):
    def winEvent(self, msg):
        if msg.message == win32con.WM_NCPAINT:
            self.decorate_window(msg)
            return True, 0
        return super(MainWindow, self).winEvent(msg)

    def decorate_window(self, msg):
        painter = QPainter(self)
        painter.fillRect(self.rect(), QColor(255,0,0))

但它会发出此警告QPainter::begin: Paint device returned engine == 0, type: 1,除了白色标题栏和边框外,没有任何绘图。

有什么建议吗?

0 个答案:

没有答案