qt QTableView中添加QCheckBox

运行效果 

 qt QTableView中添加QCheckBox

在Qt中使用QTableView时,如果你想在单元格中添加QCheckBox,通常需要使用自定义的委托(QStyledItemDelegate)来绘制和编辑这些复选框。以下是一个示例,演示如何在QTableView的单元格中添加QCheckBox

首先,确保你已经包含了必要的Qt模块:

#include <QApplication>
#include <QTableView>
#include <QStandardItemModel>
#include <QStyledItemDelegate>
#include <QCheckBox>
#include <QPainter>

然后,你需要创建一个自定义委托类,继承自QStyledItemDelegate

class CheckBoxDelegate : public QStyledItemDelegate {
    Q_OBJECT

public:
    CheckBoxDelegate(QObject *parent = nullptr) : QStyledItemDelegate(parent) {}

    // 绘制复选框
    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override {
        QStyleOptionButton checkBoxStyle;
        checkBoxStyle.state = QStyle::State_Enabled | (index.data(Qt::CheckStateRole).toBool() ? QStyle::State_On : QStyle::State_Off);
        checkBoxStyle.rect = option.rect;

        QApplication::style()->drawControl(QStyle::CE_CheckBox, &checkBoxStyle, painter);
    }

    // 创建编辑器控件
    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &index) const override {
        QCheckBox *checkBox = new QCheckBox(parent);
        checkBox->setCheckState(static_cast<Qt::CheckState>(index.data(Qt::CheckStateRole).toInt()));
        return checkBox;
    }

    // 设置编辑器数据
    void setEditorData(QWidget *editor, const QModelIndex &index) const override {
        QCheckBox *checkBox = static_cast<QCheckBox *>(editor);
        checkBox->setCheckState(static_cast<Qt::CheckState>(index.data(Qt::CheckStateRole).toInt()));
    }

    // 将编辑器数据设置回模型
    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override {
        QCheckBox *checkBox = static_cast<QCheckBox *>(editor);
        model->setData(index, checkBox->checkState(), Qt::CheckStateRole);
    }

    // 编辑器事件处理
    void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &) const override {
        editor->setGeometry(option.rect);
    }
};

接下来,在你的主程序中,你可以这样使用这个委托:

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QTableView tableView;
    QStandardItemModel model(4, 2);

    // 设置模型数据
    for (int row = 0; row < 4; ++row) {
        for (int column = 0; column < 2; ++column) {
            QModelIndex index = model.index(row, column, QModelIndex());
            model.setData(index, Qt::Unchecked, Qt::CheckStateRole);
        }
    }

    tableView.setModel(&model);

    // 设置自定义委托
    CheckBoxDelegate *delegate = new CheckBoxDelegate(&tableView);
    tableView.setItemDelegate(delegate);

    tableView.show();
    return app.exec();
}

这个示例代码展示了如何在QTableView中使用QCheckBox。通过创建一个自定义的CheckBoxDelegate,你可以在表格的单元格中绘制和编辑复选框。这个委托类负责绘制复选框、创建编辑器控件、设置编辑器数据以及将编辑器数据设置回模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值