c++ - 访问 Qtableview 中的复选框

标签 c++ qt

我是 Qt 的新手,我正在尝试使用 SetIndexWidget()QCheckbox 列添加到我的 QTableView > 如下:

QSqlQueryModel * model = new QSqlQueryModel();

model->setQuery("select * from Rendezvous");
model->insertColumn(0);
model->setHeaderData(0, Qt::Horizontal, QObject::tr(""));
model->setHeaderData(1, Qt::Horizontal, QObject::tr("ID"));
model->setHeaderData(2, Qt::Horizontal, QObject::tr("Date"));
model->setHeaderData(3, Qt::Horizontal, QObject::tr("Heure"));
model->setHeaderData(4, Qt::Horizontal, QObject::tr("Type"));
model->setHeaderData(5, Qt::Horizontal, QObject::tr("Description"));
model->setHeaderData(6, Qt::Horizontal, QObject::tr("ID Client"));
ui->tableView_RDV->setModel(model);
ui->tableView_RDV->resizeColumnToContents(0);
for(int p=0;p<model->rowCount();p++)
{
    ui->tableView_RDV->setIndexWidget(model->index(p,0),new QCheckBox());
}

这会在我的表格中添加一个复选框,我可以与之交互,但我不知道如何检查我的 QTableView 中的哪些行已选中 QCheckboxe

我很感激关于如何执行此操作的任何指示。

最佳答案

你应该使用 Qt::CheckStateRole用于显示复选框。它要快得多,并且对应于 Qt MVC:

for(int p=0;p<model->rowCount();p++)
{
    auto checked = SomeLogic ? Qt::Checked : Qt::Unchecked;
    auto index = model->index( p, 0 );
    model->setData( index, checked, Qt::CheckStateRole );
}

注意:仅当您直接指定非空值的Qt::CheckStateRole 时才会显示复选框。如果将其设置为空的 QVariant(),则不会显示复选框。

关于c++ - 访问 Qtableview 中的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47411678/

相关文章:

c++ - QTableView 行样式

qt - 如何在 Qt 中向上移动选定的行

c++ - 向小部件添加标签

c++ - std::to_string - 多个重载函数的实例与参数列表匹配

C++随机数每次都相同的序列

qt - 如何在 QML ScrollView(或 TextArea)中禁用滚动

python - 在 python 中使用 pytest 测试基于 QML 的应用程序

c++ - 比较 C++ char* 字符以解析 .OBJ 文件

c++ - 带有 openframeworks/opengl 的色度键

c++ - cuFFT 流的并发