这个复选框控件主要是做一些选项的选择与否,当然.我们也可以把他当做一个普通按钮使用.只需要处理相关信号即可.
1.首先这个按钮最重要的属性就是选中与否信号
void QCheckBox::setCheckState(Qt::CheckState state)
该信号.在对应的槽函数里面处理相关逻辑.我们也可以通过isChecked来检查控件的选中状态;
2.该控件同样能用QButtonGroup该组件来组成一个互斥的选中
即我们可能有以下需求:
当我们在做某个项目时,某个小模块需要做一个排它的选项组.比如某个人最喜欢的一件事,然后我们给它内置了很多选项,通过互斥组可以实现只能选中一个的目的.反之即可实现多选.扩展下:如果是互斥的话,通过下拉框也是能实现同样的效果.
3.一些自定义
a.通过qss样式表代码
checkBox->setStyleSheet("QCheckBox { color: pink; }"
"QCheckBox::indicator:checked { background-color: yellow; }");
这个是更改了QCheck Box的文本颜色为粉色,以及选中后的背景色为黄色;但我们的原始蓝色背景以及白色√都将被黄色填充,且是一个等大的正方形色块.如果要漂亮的选中效果,还是建议找UI,直接将QCheckBox::indicator:checked { background-color: yellow; }换成以下
QCheckBox::indicator:checked { image: url(:/路径/你的选中UI图.png); }
b.通过继承QCheckBox.并重写其paintEvent函数.以下代码仅供参考:
class MyCheckBox : public QCheckBox
{
public:
MyCheckBox(const QString &text, QWidget *parent = nullptr) : QCheckBox(text, parent)
{
}
protected:
//重写该函数自定义自己想要的外观
void paintEvent(QPaintEvent *event) override
{
Q_UNUSED(event)
QPainter painter(this);
QStyleOptionButton option;
initStyleOption(&option);
option.rect = QRect(0, 0, width(), height());
// 绘画选中以及非选中的背景
if (option.state & QStyle::State_On) {
painter.fillRect(option.rect, Qt::yellow); //选中效果
} else {
painter.fillRect(option.rect, Qt::white); //未选中效果
}
// 绘画边框
painter.drawRect(option.rect);
// 绘画对√
if (option.state & QStyle::State_On) { //只需绘制选中后的效果即可
QPen pen(Qt::white);
pen.setWidth(2);
painter.setPen(pen);
painter.drawLine(option.rect.topLeft(), option.rect.bottomRight());
painter.drawLine(option.rect.topRight(), option.rect.bottomLeft());
}
// 绘画文本
painter.drawText(option.rect, Qt::AlignCenter, text());
}
};