我是 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()
,则不会显示复选框。
我是一名优秀的程序员,十分优秀!