【发布时间】:2016-10-23 11:16:23
【问题描述】:
我想为样式表启用我自己的小部件类,我不是在谈论setStyleSheet(qss),而是在 qss 样式表中的选择器。据了解,我必须在命名空间中替换the "::" with "--"。
在这里(Qt Stylesheet for custom widget)我发现了一个类似的问题,但它已经 > 4 岁了。根据答案,我有一些详细的问题:
a) 来自https://stackoverflow.com/a/8817908/356726 的覆盖paintEvent 的已发布方法是否仍然有效(Qt5.6/5.7)
void CustomWidget::paintEvent(QPaintEvent *)
{
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
b) 在同一个线程 (https://stackoverflow.com/a/22094319/356726) 中,据说我不需要覆盖 paintEvent。好的,引导我:
b1) 无论如何覆盖paintEvent 是否有害,即使使用QFrame 也是如此?
b2) 其他基类是什么,例如QTableView?是什么让QFrame 扮演了这个特殊的角色?
c) 有没有人找到关于该主题的官方 Qt 文档。 a 中的代码不错,但它来自哪里? (here) 老实说,我不明白它的作用。
-- 编辑--
Daniel 指出了那个神奇的paintEvent sn-p here(QWidget 段落)的来源。有趣的是,QDialog 也有同样的说法(“仅支持 ..”),这可能意味着我也必须在那里使用 sn-p。我不明白他们为什么不按默认将那个 sn-p 添加到 QWidget 的 paintEvent 中。
【问题讨论】:
-
a) doc.qt.io/qt-5/stylesheet-reference.html : "仅支持 background、background-clip 和 background-origin 属性。如果您从 QWidget 继承,您需要为您的自定义 QWidget 提供一个paintEvent,如下所示:" i认为它在 Qt5.6/5.7 中仍然有效
-
谢谢,您已经找到了该代码 sn-p 的原始来源。以上更新。
标签: qt qwidget qtstylesheets qt5.6 qframe