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助手中有这样一段描述:

