在使用Qt的界面时,经常会自定义控件,当我们自定义QWidget控件,即写一个MyWidget,继承自QWidget,在MyWidget中设置样式表,实际运行程序,会发现样式表设置没有效果。
原因:qt的样式表需要通过paintEvent函数来实现,而继承自QWidget的控件,QWidget的paintEvent函数实现为空,也就导致了设置样式表是无法生效的。
解决方法:
在继承的类中,重写paintEvent函数
void MyWidget::paintEvent(QPaintEvent*)
{
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
注意加上头文件:
#include <QPainter>
#include <QStyleOption>
当然,以上我们是解决了继承自QWidget样式表失效的问题,我们也可以采用绕路的方法,即采用继承自QFrame的类,QFrame的类中实现了paintEvent函数。
结尾:
只为记录,只为分享! 愿所写能对你有所帮助。不忘记点个赞,谢谢~