我该如何在QTableView中仅使用QStandardItemModel添加一个可编辑的用户复选框?

11
我有一个 QTableView 和一个 QStandardItemModel。是否有一列可以包含复选框,这些复选框是可供用户编辑的,而不使用委托或使用抽象模型类?并不是说我做不到,只是想尽量减少代码,对于简单的复选框,我会觉得代码过多。
通过使用 model.setData(index, Qt::Unchecked,Qt::CheckStateRole) 创建了复选框,但它不能由用户进行编辑(复选框旁边的文本可以)。
我使用 modelTX.setData(index, FALSE),但这将创建一个包含True和False的组合框。
我会尝试使用 setItemData
1个回答

25

请检查以下示例是否适用于您:

QStandardItemModel* tableModel = new QStandardItemModel();
// create text item
tableModel->setItem(0, 0, new QStandardItem("text item"));
// create check box item
QStandardItem* item0 = new QStandardItem(true);
item0->setCheckable(true);
item0->setCheckState(Qt::Checked);
item0->setText("some text");
tableModel->setItem(0, 1, item0);
// set model
ui->tableView->setModel(tableModel);

希望这可以帮到您,敬礼


谢谢回复。我会在周一回到工作时尝试,但我认为它会起作用。 - yan bellavance
它可以工作,谢谢。但是如何检查每个复选框是否被选中? - McLan
2
@Suda.nese 用 item0->checkState() 来实现此目的。PS:在使用Qt时,通常对于每个setter方法(如setSomething())都有一个名为something()的getter。 - Dmitry Volosnykh
你的代码可以工作,但我只想要复选框而不是旁边的文本。为了避免我不想要的文本,我没有使用 setText(),但是包含复选框的列似乎被分成了两部分。有没有办法避免这种情况?谢谢。 - Angie Quijano
我知道这是一个旧的帖子,但我也在寻找一个没有周围文本的复选框。你找到解决方案了吗? - Qtdesigner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接