教程網址:http://www.qter.org/portal.php?mod=view&aid=57
0.打開tablemodel.pro文件,加上:
QT += coregui sql
注意一定得是加上!若把原來那句改了,會報錯
1.添加頭文件connection.h
2.main.cpp文件中include connection.h,調用CreateConnection()方法
3.完成后到mainwindow.h文件中,先包含頭文件:
include
然后添加私有對象:
QSqlTableModel *model;
4.在tableEdit中顯示數據庫tablemodel,常放在mainwindow的構造函數中:
model = new QSqlTableModel(this);
model->setTable("student"); //選表
model->setEditStrategy(QSqlTableModel::OnManualSubmit); //選編輯策略
model->select(); //選取整個表的所有行 相當於select all
//不顯示name屬性列,如果這時添加記錄,則該屬性的值添加不上
//model->removeColumn(1);
ui->tableView->setModel(model); //顯示在tableView中
//使其不可編輯
//ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
在mainwindow.cpp中加上如下內容,方便后面的增刪改查
include "QMessageBox"
include "QSqlError"
6.提交:model->database().transaction(); //開始事務操作
if (model->submitAll()) {
model->database().commit(); //提交
} else {
model->database().rollback(); //回滾
QMessageBox::warning(this, tr("tableModel"),
tr("數據庫錯誤: %1")
.arg(model->lastError().text()));
}
6.撤銷(若未提交則可撤銷所有更改)
model->revertAll();
7.添加:改善了原教程中的主鍵默認值
int rowNum = model->rowCount(); //獲得表的行數
//人工遞增主鍵id
QSqlQuery query;
query.exec("select max(id) from student");
query.first() ;
int id = query.value(0).toInt() + 1;
//添加
model->insertRow(rowNum); //添加一行
model->setData(model->index(rowNum,0),id);
//model->submitAll(); //可以直接提交