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文件里将设置某个控件的样式表放到前面或后面)
暂无评论