Qt 为样式表启用自己的小部件
我想为样式表启用我自己的widget类,我所说的不是Qt 为样式表启用自己的小部件,qt,qwidget,qtstylesheets,qt5.6,qframe,Qt,Qwidget,Qtstylesheets,Qt5.6,Qframe,我想为样式表启用我自己的widget类,我所说的不是setStyleSheet(qss),而是qss样式表中的选择器。据了解,我必须在名称空间中替换 这里()我发现了一个类似的问题,但它已经超过4年了。根据答案,我有一些详细的问题: a) 已发布的方法是否具有覆盖的paintEvent仍然有效(Qt5.6/5.7),从 b) 在同一个线程()中,我不需要重写paintEvent。好的,让我想到: b1)即使使用QFrame,覆盖paintEvent是否有害? b2)其他基类(例如QTableVi
setStyleSheet(qss)
,而是qss样式表中的选择器。据了解,我必须在名称空间中替换
这里()我发现了一个类似的问题,但它已经超过4年了。根据答案,我有一些详细的问题:
a) 已发布的方法是否具有覆盖的paintEvent
仍然有效(Qt5.6/5.7),从
b) 在同一个线程()中,我不需要重写paintEvent
。好的,让我想到:
b1)即使使用QFrame
,覆盖paintEvent
是否有害?
b2)其他基类(例如QTableView
)有什么关系?是什么使得QFrame
具有这种特殊的角色
c) 有没有人找到关于这个主题的官方Qt文档。a中的代码很好,但它来自哪里?老实说,我不明白它是干什么的
--编辑--
丹尼尔指出了那神奇的paintEvent
片段(QWidget
段落)的来源。有趣的是,QDialog
也使用了相同的(“仅支持…”),这可能意味着我也必须使用其中的代码片段。我不明白为什么他们不按照默认值将该片段添加到QWidget
的paintEvent
。覆盖paintEvent的发布方法仍然有效(Qt5.6/5.7)
- 对
- 如果你是子类
不是特例,它适用于所有小部件。默认设置不执行任何操作。它是空的。这就是为什么在子类化QFrame
时,必须重写它并提供自己的绘画来启用样式表。重写QWidget
的绘制事件是无害的,但除非调用QFrame
的实现,否则将丢失默认行为QFrame
- 。
如果向下滚动一点,它会显示:
只支持背景, 背景剪辑和背景原点属性。如果你是子类 在QWidget中,您需要为您的自定义设置提供一个paintEvent QWidget如下所示:QWidget
- 对
- 如果你是子类
不是特例,它适用于所有小部件。默认设置不执行任何操作。它是空的。这就是为什么在子类化QFrame
时,必须重写它并提供自己的绘画来启用样式表。重写QWidget
的绘制事件是无害的,但除非调用QFrame
的实现,否则将丢失默认行为QFrame
- 。
如果向下滚动一点,它会显示:
只支持背景, 背景剪辑和背景原点属性。如果你是子类 在QWidget中,您需要为您的自定义设置提供一个paintEvent QWidget如下所示:QWidget
a) :“仅支持背景、背景剪辑和背景源属性。如果您从QWidget子类化,则需要为自定义QWidget提供paintEvent,如下所示:“我认为它在Qt5.6/5.7中仍然有效。谢谢,您已经找到了该代码片段的原始源代码。更新如上。a):“仅支持背景、背景剪辑和背景源属性。如果您从QWidget中创建子类,则需要为自定义QWidget提供paintEvent,如下所示:“我认为它在Qt5.6/5.7中仍然有效。谢谢,您已经找到了该代码片段的原始源代码。以上更新。知道为什么不将
paintEvent
实现作为QWidget
的默认值吗?@HorstWalter,因为QWidget
是一个空的小部件。知道为什么不将paintEvent
实现作为QWidget
的默认值吗?@HorstWalter,因为QWidget
是一个空的小部件吗小装置。
void CustomWidget::paintEvent(QPaintEvent *)
{
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
void CustomWidget::paintEvent(QPaintEvent *)
{
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}