目录
1. 现象
今天想在QWidget中贴一张png图片作为背景图或者通过QSS设置背景颜色,在Qt Designer 能显示,但运行时,死活不显示背景图片或背景颜色。样式表设置如下:
QWidget
{
border-image:url(:/untitled2/image/operpanel.png);
}
或
QWidget
{
background-color:#FF0000;
}
2. 解决方法
Qt Designer 中能显示证明图片的路径是正确的,不显示肯定其它问题导致的。
2.1. 第1种解决方法
经过排查,在QWidget所在类重写paintEvent函数,如下:
void Widget::paintEvent(QPaintEvent* event)
{
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
其中Widget为QWidget的子类,重新编译运行后就可以显示图片了。
2.2. 第2种解决方法
如果不是需要直接在Widget(Widget为QWidget的子类)窗体上贴图,可以在Widget的上面套一个QFrame,然后将图片贴到QFrame对象上,如下:
此时不需要重写QWidget的paintEvent函数。
3. 总结
- 如果想直接在QWidget上贴图且能在运行时显示,必须为QWidget窗体设置好样式表,且按2.1节那样重写paintEvent函数。
- 如果需求不是直接在QWidget上贴图,则可以在QWidget上套个QFrame,让这个QFrame完全铺满盖住QWidget,然后对QFrame设置好背景图的样式表,此时不需要重写QWidget的paintEvent函数。
4. 附录
- 图片不显示只对整个窗体的背景图时不显示,当图片贴在窗体上的某个部件如:作为按钮贴图,则不会存在这个问题。
- 以下博文说的通过勾选Qtcreator中的Shadow build方法都不起作用,写这博文的人根本就没搞懂Qtcreator中的Shadow build的作用。
Qt-ui界面的工具栏在设计时能出现,但是运行之后不显示的问题解决
关于Shadow build具体作用,请参考:Qt Creator 的 Shadow build(影子构建)