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()),再查詢獲得結果