显示方法有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(); }