2014-04-01 76 views
2

我试图制作一个表格,允许用户输入一个满足某些标准的标记。我已连接到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); 

但是,我不能让第二列可编辑。我将如何去完成这件事?

回答

0

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); 
+0

有一些领域,我不希望能够编辑,如标准列。我如何使特定栏不可编辑? 另外,当我尝试在成绩栏中输入成绩时,它会返回一个空白,并且我输入的值不会在数据库中更新。我应该使用信号更新还是应该自动执行该操作的关系表模型? – sengakae

+0

好吧我通过一些Google搜索了解到我的第一个问题。将尝试寻找数字2. – sengakae

+0

您可以有一个自定义模型并实现Qt :: ItemFlags QAbstractItemModel :: flags(const QModelIndex&index)const方法并返回一组标志,其中未设置Qt :: ItemIsEditable标志你不想编辑的单元格。 – Nejat