QTableView_添加复选框(1)

本文介绍了如何在QTableView中添加复选框,主要聚焦于通过QAbstractTableModel重写flag()函数的方法。虽然这种方法实现的复选框会显示在表格最前端且无法居中,但它能实现数据的更新和交互。代码示例包括TableModel.h、TableModel.cpp和MainWindow.cpp的实现细节,以及如何通过updateData()、data()和setData()函数管理表格数据。
摘要由CSDN通过智能技术生成

在项目中,我们经常会遇到需要在表格中添加复选框,tableView有以下几种实现方式。

1、利用自定义委托QAbstractItemDelegate中的CreateEditor()函数来实现,这种实现方式加入的复选框需要双击才能显示控件,一般不能满足实际需求,用户体验很差。

2、利用QAbstractTableModel重写flag()函数,设置flag属性Qt::ItemUserCheckable,配合data(), setData()函数来实现。但这种方式实现的checkbox不能布局,总是显示在表格的最前端,不能实现居中显示。

3、利用自定义委托QAbstractItemDelegate,重写paint()函数。配合重写editorEvent()函数实现QCheckBox的功能。此方法用户体验好,适合扩展,还可以绘制其他控件。

本文主要介绍第二种方式,QAbstractTableModel重写flag()函数。

上代码

TableModel.h

继承QAbstractTableModel

#ifndef TABLEMODEL_H
#define TABLEMODEL_H

#include <QAbstractTableModel>

typedef struct ST_ROW_DATA
{
    bool bCheckState = false;
    QString strTestData = "";
}stRowData;

enum enColumnIndex
{
    CheckBoxColumn,
    QStringColumn
};

class TableModel : public QAbstractTableModel
{
    Q_OBJECT

public:
    explicit TableModel(QObject *parent = nullptr);

    // Header:
    QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;

    bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;

    // Basic functionality:
    int rowCount(const QModelIndex &parent = QModelIndex()) const override;
    int columnCount(const QModelIndex &parent &#
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值