16

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

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

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

如何理解这种行为?是否可以使样式表在案例 1 中工作?

4

2 回答 2

26

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

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

由 wysota 以及 Qt 帮助提供。

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

于 2013-08-20T20:45:41.100 回答
3

我不知道为什么它们不起作用,但我将 Werner Erasmus 的答案中的代码翻译成 python。以下“为我工作”™</p>

def paintEvent(self, pe):

    o = QStyleOption()
    o.initFrom(self)
    p = QPainter(self)
    self.style().drawPrimitive(QStyle.PE_Widget, o, p, self)
于 2015-10-01T13:57:33.550 回答