我正在为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
,除了白色标题栏和边框外,没有任何绘图。
有什么建议吗?