Qt中的QSqlQueryModel,QSqlTableModel,QSqlRelationalTableModel
1 SQL查询模型,QSqlQueryModel
QSqlQueryModel * model = new QSqlQueryModel(this);
model->setQuery("select * from student");
model->setHeaderData(0,Qt::Horizontal,tr("学号"));
model->setHeaderData(1,Qt::Horizontal,tr("姓名"));
model->setHeaderData(2,Qt::Horizontal,tr("课程"));
QTableView * tableView = new QTableView(this);tableView->setModel(model);setCentralWidget(tableView);
2 SQL表格模型
若要成为只读模型,直接设置视图为
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);//可以设置为只读模型
tableModel = new QSqlTableModel(this);
tableModel->setTable("student");
tableModel->select();
tableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
ui->tableView->setModel(tableModel);
3 SQL关系表格模型(QSqlRelationalTableModel)
他继承自QSqlTableModel,并对他作了拓展,
. 关系QSqlRelation(const QString & tableName, const QString & indexColumn, const QString & displayColumn)
QSqlRelationalTableModel *model = new QSqlRelationalTableModel(this);
model->setTable("student");
QSqlRelation sqlRelation("course","id","name");//设置关系
model->setRelation(2,sqlRelation);
model->select();
QTableView *tableView = new QTableView(this);
tableView->setModel(model);
setCentralWidget(tableView);
//QSqlRelationalDelegate委托类,可以为QSqlRelationalTableModel显示和编辑数据
tableView->setItemDelegate(new QSqlRelationalDelegate(tableView));
注意点:
QSqlQuery:熟悉SQL语法,需要显示特定的数据(不需要将所有的数据显示出来)显示出来,就用它
QSqlTableModel:显示一个单独的表格
QSqlQueryModel:用来显示任意结果集,想使其可读/写,最好重新实现flags()和setDat()函数
QSqlRelationalDelegate:要实现关联的效果,需要先关联(model->setRelation()),再查询获得结果