QSS ID选择器失效的解决方案

2022年2月28日 3414点热度 0人点赞 0条评论

如果遇到这样的问题,并且控件继承与QWidget,那么这个方案也许能解决问题。

解决方案

void SubWidget::paintEvent(QPaintEvent* event)
{
    QStyleOption opt;
    opt.init(this);
    QPainter p(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}

只需要重写控件的paintEvent()函数即可。

原理

参照QtHelp :https://doc.qt.io/archives/qt-4.8/stylesheet-reference.html#list-of-stylable-widgets

文档指出,QWidget默认情况下只支持background、backgrou-clip、background-origin三种属性,如果继承QWidget就需要重新实现paintEvent()函数。

但是实际情况是就算不重写paintEvent(),也只是偶尔会遇到QSS不生效的情况(至少我目前的测试结果是这样,等待大神高见)。

文档中还指出了一个小细节,就是必须在类中使用Q_OBJECT 宏,这个宏会影响类选择器和类型选择器的使用。(如果没有则两个选择器都无法正常使用)

大脸猫

这个人虽然很勤快,但什么也没有留下!

文章评论