QCheck Box 控件使用

这个复选框控件主要是做一些选项的选择与否,当然.我们也可以把他当做一个普通按钮使用.只需要处理相关信号即可.


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());
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值