运行效果

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,你可以在表格的单元格中绘制和编辑复选框。这个委托类负责绘制复选框、创建编辑器控件、设置编辑器数据以及将编辑器数据设置回模型。

1034

被折叠的 条评论
为什么被折叠?



