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

时间:2013-08-20 20:10:17

标签: qt

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

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

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

如何理解这种行为?是否可以使样式表适用于案例1?

2 个答案:

答案 0 :(得分:23)

如果您希望自定义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时,您的类没有Meta数据,因此被视为QWidget。

答案 1 :(得分:2)

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

print(error + random.choice(errors) + onLin+random.choice(lineNums))