Qt自定义checkbox实现按下回车键该项打勾


使用qt实现一个列表,列表中每一项中的类似一个checkbox,通过上下键可以切换选中项,按下回车键在已经选中的项前出现对勾。且选中最后一行后,再去按向下按键会接着回滚选中第一行,按向上的按键也是类似的效果。
程序的运行效果如下:

20241203_163929

开发环境

使用ubuntu下QtCreator4.11.。
在这里插入图片描述

代码结构

这里将项目的结构截图贴上,为了更好的复现项目 。
项目结构图如下:
在这里插入图片描述
ui文件中的控件采用在项目中用代码实现,没有在ui设计器中拖控件,是项目生成时生成的dialog.ui。

示例代码

本示例中有两个类可以单独拿来使用,作为自定义的checkbox,分别为MyCheckBox类和MyCheckMarkIcon类。这两个类用来实现一个自定义的checkbox。
下面是具体实现代码。
mycheckmarkicon.h

#ifndef MYCHECKMARKICON_H
#define MYCHECKMARKICON_H

#include <QObject>
#include <QWidget>

class MyCheckMarkIcon : public QWidget
{
   
    Q_OBJECT
public:
    explicit MyCheckMarkIcon(QWidget *parent = nullptr);
    void setColor(const QColor& color);
    void setSelected(const bool& bIsSelected);
    bool getSelected()const;
protected:
    void paintEvent(QPaintEvent *event) override;
signals:
private:
    QColor m_color;
    QColor m_backColor;//背景色
    bool m_bIsSelected;//是否选中
};

#endif // MYCHECKMARKICON_H

mycheckmarkicon.cpp

#include "mycheckmarkicon.h"

#include <QPainter>
#include <QStyleOption>

MyCheckMarkIcon::MyCheckMarkIcon(QWidget *parent) : QWidget(parent),m_color(Qt::transparent)
{
   
    setFixedSize(20,20);
}

void MyCheckMarkIcon::setColor(const QColor &color)
{
   
    m_color = color;
    m_bIsSelected == true?m_backColor=Qt::yellow:m_backColor = QColor("#6A5ACD");
    update();
}

void MyCheckMarkIcon::setSelected(const bool &bIsSelected)
{
   
    m_bIsSelected = bIsSelected;
}

bool MyCheckMarkIcon::getSelected() const
{
   
    return m_bIsSelected;
}

void MyCheckMarkIcon::paintEvent(QPaintEvent *event)
{
   
    QPainter painter(this);

    QPen pen(Qt::SolidLine);
    pen.setWidth(2);
    pen.setBrush(m_backColor);

    QRect rect(0,0,20,20);
    painter.fillRect(rect,m_backColor);//绘制填充矩形

    pen.setColor(m_color);
    painter.setPen(pen);

    QPainterPath path;
    path.moveTo(rect.left()+5,rect.right()-5);
    path.lineTo(rect.left()+10,rect.bottom());
    path.lineTo(rect.left()+15,rect.top()+5);
    painter.strokePath(path,pen);//使用指定的笔在路径上绘制轮廓
}

mycheckbox.h

#ifndef MYCHECKBOX_H
#define MYCHECKBOX_H

#include <QWidget>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肩上风骋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值