案例 1:使用 Q_OBJECT 创建 QWidget 的子类并设置样式表——没有效果。
案例 2:创建没有 Q_OBJECT 的 QWidget 子类并设置样式表——按预期工作
案例 3:使用 Q_OBJECT 创建 QLabel 的子类并设置样式表——按预期工作
如何理解这种行为?是否可以使样式表在案例 1 中工作?
案例 1:使用 Q_OBJECT 创建 QWidget 的子类并设置样式表——没有效果。
案例 2:创建没有 Q_OBJECT 的 QWidget 子类并设置样式表——按预期工作
案例 3:使用 Q_OBJECT 创建 QLabel 的子类并设置样式表——按预期工作
如何理解这种行为?是否可以使样式表在案例 1 中工作?
如果希望自定义 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。
我不知道为什么它们不起作用,但我将 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)