QWidget 样式不生效问题
1.现象
在qss
中对QWidget
使用样式无效
QWidget#CustomWidget
{border:1px solid red;border-radius: 20px;
}
2.原因
css
样式需要通过paintEvent
才能正常绘制到控件表面, 而QWidget
的paintEvent
函数实现为空(Qt5.7.0源码):
QWidget
仅支持background
、background-clip
、background-clip
属性
3.解决方案
方案1:
使用带边框的QFrame
类代替QWidget
, QFrame
继承自 QWidget
,且paintEvent
函数有默认实现
方案2:
为自定义QWidget
提供一个默认的paintEvent
函数,如下:
void CustomWidget::paintEvent(QPaintEvent *)
{QStyleOption opt;opt.init(this);QPainter p(this);style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
Qt助手中有这样一段描述: