qt中ui设计师界面stylesheet中设置了背景图片但是运行不显示
1.问题1
通过主窗口Widget的stylesheet设置主窗口背景图片
QWidget#Widget{
border-image: url(:/images/2.png);
color: rgba(255, 255, 255, 255);
}
设置完之后在ui设计界面是能够看见背景图片设置成功的,通过快捷键alt+shift+r显示预览界面也是没有任何问题的,但是运行时却不显示背景图片
2.问题2
通过查阅:
参考QWidget样式表或背景图片在Qt Designer 中能显示但运行时不显示的解决方法_为什么qt的图片运行不显示-CSDN博客
Qt利用setstylesheet给控件设置背景图片不能显示_qt使用setstylesheet 无法加载背景图片-CSDN博客
1.QWidget中使用stylesheet这种方法是行不通的,设置背景图片背景图片其实并没有发生真实改变,但是它的子窗体背景图片是会发生改变的。
2.解决方法一:即在QtDesigner中添加一个Frame窗口,后续所有的控件都放在这个新的Frame窗口,我们只需对这个新添加的Frame窗口来进行styleSheet设置即可
我试了一下添加新的frame的解决方法,但是对于我来说并没有效果,背景还是不显示。
3.重写虚函数paintEvent函数
void Widget::paintEvent(QPaintEvent* event)
{
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
对我来说是有效果的,但是有一个很严重的问题,第一次生效了,确实显示背景图片了,但是后续我修改背景图片为其他的背景图时,运行时的背景不是我新设置的背景图,而还是第一次的背景图。
3.解决
通过代码设置窗口的palette属性来实现
void Widget::setBackground()
{
QPixmap pixmap=QPixmap(":/images/2.png").scaled(this->size());
QPalette palette;
//设置主窗口背景图片
palette.setBrush(QPalette::Window,QBrush(pixmap));
this->setPalette(palette);
}