qt 如何重写QCheckBox的勾选框样式?
时间: 2023-10-05 19:08:19 浏览: 181
可以通过重写 QStyle
类中的 drawPrimitive
函数来自定义 QCheckBox
的勾选样式。具体步骤如下:
创建一个继承自
QProxyStyle
的自定义样式类,例如MyStyle
。在自定义样式类中重写
drawPrimitive
函数,并判断绘制的元素是否为PE_IndicatorCheckBox
,是的话就绘制勾选框样式。在
QCheckBox
控件中设置自定义样式类对象,例如checkBox->setStyle(new MyStyle)
。
下面是一个简单的示例代码:
class MyStyle : public QProxyStyle
{
public:
void drawPrimitive(PrimitiveElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget = nullptr) const override
{
if (element == PE_IndicatorCheckBox)
{
const QStyleOptionButton* buttonOption = qstyleoption_cast<const QStyleOptionButton*>(option);
if (buttonOption)
{
QStyleOptionButton opt(*buttonOption);
opt.rect = opt.rect.adjusted(2, 2, -2, -2);
opt.state &= ~QStyle::State_MouseOver;
opt.state &= ~QStyle::State_HasFocus;
QStylePainter p(painter);
p.drawControl(CE_CheckBox, opt);
return;
}
}
QProxyStyle::drawPrimitive(element, option, painter, widget);
}
};
// 使用自定义样式类
QCheckBox* checkBox = new QCheckBox("My CheckBox");
checkBox->setStyle(new MyStyle);
这样就可以实现自定义 QCheckBox
的勾选框样式了。
相关推荐


















