如何使表的列可编辑

How to make a column of a table editable?

本文关键字:编辑 何使表      更新时间:2023-10-16

我正在尝试制作一个表格,允许用户在给定某些条件的情况下输入 10 分中的分数。我连接到我的SQLite数据库,并在左侧检索一列用于描述标准,并在右侧检索一列,我希望能够输入成绩(可编辑列)。这是我的代码:

QSqlQueryModel *model = new QSqlQueryModel();
QSqlQuery* qry = new QSqlQuery(conn.mydb);
qry->prepare("select I.itemDescription, S.grade from Items I, ItemsToStudent S where     I.itemID = S.itemID and I.rubricID = ? and S.courseID = ? and S.studentID = ?");
qry->addBindValue(actid);
qry->addBindValue(courseid);
qry->addBindValue(studentid);
qry->exec();
model->setQuery(*qry);
ui->rubricTable->setModel(model);

但是,我无法使第二列可编辑。我将如何实现这一目标?

QSqlQueryModel类为 SQL 结果集提供只读数据模型。您可以使用以下QSqlRelationalTableModel

QSqlRelationalTableModel *model = new QSqlRelationalTableModel(this,conn.mydb);
model->setEditStrategy(QSqlTableModel::OnFieldChange);
model->setJoinMode(QSqlRelationalTableModel::LeftJoin);
model->setTable( "Items" );
model->setRelation( 0, QSqlRelation( "ItemsToStudent", "itemID", "grade" ) );
model->setFilter( QString("rubricID = ? and courseID = ? and studentID = ?") );
model->select();
model->setHeaderData( 1, Qt::Horizontal, tr("Criteria") );
model->setHeaderData( 2, Qt::Horizontal, tr("Grade") );
ui->rubricTable->setModel(model);

您还可以隐藏不想显示的列,如下所示:

ui->rubricTable_tbl->hideColumn(3);