顯示方法有3類,分別爲:關係表格模型、表格模型、查詢模型
顯示步驟基本爲:
1 建立model
2 爲model指定數據庫表
3 (關係表格模型先設置關係)選擇表內容
4 將model應用於view數據庫
下面是代碼片斷,函數
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QSqlQueryModel> #include <QSqlTableModel> #include <QSqlRelationalTableModel> #include <QSqlRelationalDelegate> #include <QTableView> #include <QDebug> #include <QMessageBox> #include <QSqlError> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); //使用關係表格模型顯示數據 QSqlRelationalTableModel *model = new QSqlRelationalTableModel(this); model->setTable("student"); model->setRelation(2, QSqlRelation("course", "id", "name")); model->select(); /* //這裏view範圍不一樣 QTableView *view = new QTableView(this); view->setModel(model); setCentralWidget(view); */ ui->tableView->setModel(model); //使用委託類提供一個qcombobox部件顯示可選數據 ui->tableView->setItemDelegate(new QSqlRelationalDelegate(ui->tableView)); /* * //使用表格模型顯示數據 //QSqlTableModel *model = new QSqlTableModel(this); //這裏起初寫成了上面語句,能夠運行與顯示,可是後面按鈕使用會崩潰,由於暫時覆蓋了頭文件中定義的指針,構造函數結束後調用的頭文件中的指針是空的。 model = new QSqlTableModel(this); model->setTable("student"); model->select(); //設置編輯策略 model->setEditStrategy(QSqlTableModel::OnManualSubmit); ui->tableView->setModel(model); */ /* * //使用查詢模型顯示數據 QSqlQueryModel *model = new QSqlQueryModel(this); model->setQuery("select * from student"); model->setHeaderData(0, Qt::Horizontal, "學號"); model->setHeaderData(1, Qt::Horizontal, "姓名"); model->setHeaderData(2, Qt::Horizontal, "課程"); QTableView *view = new QTableView(this); view->setModel(model); setCentralWidget(view); */ } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { //保存修改 //開始事務操做 model->database().transaction(); if (model->submitAll()){ if (model->database().commit()) QMessageBox::information(this, "tableModel", "數據修改爲功"); }else{ model->database().rollback(); QMessageBox::warning(this, "tableModel", QString("數據庫錯誤:'%1'").arg(model->lastError().text()), QMessageBox::Ok); } } void MainWindow::on_pushButton_2_clicked() { model->revertAll();//恢復全部未提交的修改(model中的修改) } void MainWindow::on_pushButton_7_clicked() { QString name = ui->lineEdit->text(); //根據姓名進行篩選,%1必定要使用單引號 model->setFilter(QString("name = '%1'").arg(name)); model->select(); } void MainWindow::on_pushButton_8_clicked() { //顯示全表 model->setTable("student"); model->select(); } void MainWindow::on_pushButton_5_clicked() { //按id字段,即第0列,升序排列 model->setSort(0, Qt::AscendingOrder); model->select(); } void MainWindow::on_pushButton_6_clicked() { //按id降序排列 model->setSort(0, Qt::DescendingOrder); model->select(); } void MainWindow::on_pushButton_4_clicked() { //刪除選中行 int curRow = ui->tableView->currentIndex().row(); qDebug()<<curRow; model->removeRow(curRow); int ok = QMessageBox::warning(this, "刪除當前行", "肯定刪除當前行嗎?", QMessageBox::Yes, QMessageBox::No); if (ok == QMessageBox::No){ model->revertAll(); }else{ model->submitAll(); } } void MainWindow::on_pushButton_3_clicked() { //增長一行記錄 //得到表的行數 int rowNum = model->rowCount(); int id = 10; //添加一行 model->insertRow(rowNum); model->setData(model->index(rowNum, 0), id); //能夠直接提交 //model->submitAll(); }