为什么在子类化QWidget和使用Q_OBJECT时样式表不起作用?

use*_*797 13 qt

案例1:使用Q_OBJECT创建QWidget的子类并设置样式表 - 没有效果.

案例2:创建没有Q_OBJECT的QWidget的子类并设置样式表 - 按预期工作

案例3:使用Q_OBJECT创建QLabel的子类并设置样式表 - 按预期工作

如何理解这种行为?是否有可能使样式表在案例1中起作用?

Wer*_*mus 23

如果您希望自定义QWidget子类支持样式表,则需要提供以下代码:Qt代码:

void myclass::paintEvent(QPaintEvent *pe)
{                                                                                                                                        
  QStyleOption o;                                                                                                                                                                  
  o.initFrom(this);                                                                                                                                                                
  QPainter p(this);                                                                                                                                                                
  style()->drawPrimitive(
    QStyle::PE_Widget, &o, &p, this);                                                                                                                         
};
Run Code Online (Sandbox Code Playgroud)

礼貌的wysota,以及Qt的帮助.

当您不提供Q_OBJECT时,您的类没有Meta数据,因此被视为QWidget.


Whi*_*bit 8

我不知道为什么它们不起作用,但我将 Werner Erasmus 的答案中的代码翻译为 python。以下“对我有用”\xe2\x84\xa2

\n\n
def paintEvent(self, pe):\n\n    o = QStyleOption()\n    o.initFrom(self)\n    p = QPainter(self)\n    self.style().drawPrimitive(QStyle.PE_Widget, o, p, self)\n
Run Code Online (Sandbox Code Playgroud)\n