-
在使用QWidget的过程中发现一个奇怪的现象,如果在代码中直接设置样式表 setStyleSheet(“background-color: #FFFFFF;”); 会不生效,经过多番尝试和查询,发现QT官方文档中提到需要按照如下图片中的格式重写 paintEvent 函数,经测试可以使得样式表生效;
-
编者按:经过与同事的讨论和经验,如果此QWidget不是顶层widget (即将被绘制为窗口的那一层)的时候,可以考虑不继承QWidget,转而继承 QFrame,对QFrame进行设置样式表操作的话,无需重写上述的paintEvent函数;
-
代码示例:
// .h file
class CustomWidget : public QWidget
{
...
protected:
void paintEvent(QPaintEvent *);
...
};
// .cpp file
void CustomWidget::paintEvent(QPaintEvent *)
{
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}