C++qtableview绘制复选框
时间: 2023-07-11 07:17:41 浏览: 129
Qt之QTableView添加复选框
5星 · 资源好评率100%
要在C++的QTableView中绘制复选框,可以使用QItemDelegate类。
以下是一个简单的示例代码,演示如何在QTableView中绘制复选框:
```cpp
#include <QApplication>
#include <QStandardItemModel>
#include <QTableView>
#include <QItemDelegate>
#include <QCheckBox>
class CheckBoxDelegate : public QItemDelegate {
public:
CheckBoxDelegate(QObject* parent = nullptr) : QItemDelegate(parent) {}
QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const override {
QCheckBox* editor = new QCheckBox(parent);
editor->setCheckState(Qt::Unchecked);
return editor;
}
void setEditorData(QWidget* editor, const QModelIndex& index) const override {
bool value = index.model()->data(index, Qt::EditRole).toBool();
QCheckBox* checkBox = static_cast<QCheckBox*>(editor);
checkBox->setChecked(value);
}
void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const override {
QCheckBox* checkBox = static_cast<QCheckBox*>(editor);
bool value = checkBox->isChecked();
model->setData(index, value, Qt::EditRole);
}
void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const override {
editor->setGeometry(option.rect);
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// create a standard item model
QStandardItemModel model(4, 2);
model.setHeaderData(0, Qt::Horizontal, "Name");
model.setHeaderData(1, Qt::Horizontal, "Selected");
// populate the model
model.setData(model.index(0, 0), "Item 1");
model.setData(model.index(1, 0), "Item 2");
model.setData(model.index(2, 0), "Item 3");
model.setData(model.index(3, 0), "Item 4");
// create a table view
QTableView view;
view.setModel(&model);
// set the delegate for the "Selected" column
CheckBoxDelegate delegate;
view.setItemDelegateForColumn(1, &delegate);
// show the view
view.show();
return app.exec();
}
```
在这个示例中,我们创建了一个名为“CheckBoxDelegate”的QItemDelegate子类,它将复选框作为编辑器创建,并将其用于第二列。在createEditor()函数中,我们创建一个QCheckBox并将其返回。在setEditorData()函数中,我们从模型中获取数据,并将其设置为复选框的状态。在setModelData()函数中,我们从复选框中获取状态,并将其设置回模型中。在updateEditorGeometry()函数中,我们将编辑器的几何形状设置为单元格的矩形。
最后,我们将CheckBoxDelegate实例分配给QTableView的第二列,以便在该列中显示复选框。
阅读全文