0

Qt设置样式表不生效问题

kievc
2023-3-28 1634 0
1、给继承QWidget的类直接设置样式表不生效
1)在UI窗口内设置样式表,应用后显示正常,但是启动程序后不显示

2)在类的构造函数内通过setStyleSheet设置样式表
setStyleSheet("QWidget{border-image: url(:/up.png);}");​

此中情况只需要在构造函数中添加下面这句即可

//Qt默认不画背景,只有需要时才绘制背景,这句代码开启背景绘制
setAttribute(Qt::WA_StyledBackground);


2、样式表写错造成的不生效
错误样式:

setStyleSheet("{border-image: url(:/up.png);}");

 

正确样式:
setStyleSheet("QWidget{border-image: url(:/up.png);}");​

setStyleSheet("QWidget#widget{border-image: url(:/up.png);}");

此错误是没有给定需要设置样式类的名称

3、在带有UI界面的窗口类中,添加了如下代码,然后在给其设置样式表时,样式表无效

setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint);
setAttribute(Qt::WA_TranslucentBackground);

//以下样式不生效
{
setAttribute(Qt::WA_StyledBackground);
setStyleSheet("QWidget{border-image: url(:/bg.png);}"); 
}

4、重写QWidget::paintEvent标准方法

void MyWidget::paintEvent(QPaintEvent *event)
{
    QPainter p(this);

    // ① 让 QSS 绘制背景
    QStyleOption opt;
    opt.init(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);

    // ② 你自己的绘制
}



5、设置样式表顺序的问题:可能某个控件或窗口的样式表被覆盖了,适当调整样式表设置位置(qss文件里将设置某个控件的样式表放到前面或后面)

 

Qt
最新回复 (0)
    无评论

    暂无评论

返回