Qt使用数据库(2)

下面的代码将数据库里面的东西通过TableView显示出来,具体的参数参见文档

#include "mainwindow.h"
#include"QSqlQuery"
#include "QSqlError"
#include "QSqlTableModel"
#include "QSqlRecord"
#include"QTableView"
#include"QHeaderView"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

   if ( w.connect("test"))
    {
        QSqlTableModel *model = new QSqlTableModel;
        model->setTable("student");
        model->setSort(1, Qt::AscendingOrder);
        model->setHeaderData(1, Qt::Horizontal, "Name");
        model->setHeaderData(2, Qt::Horizontal, "Age");
        model->select();
     // QTableView *view = new QTableView; view->setModel(model);
       w.view->setModel(model);
      w.view->setSelectionMode(QAbstractItemView::ExtendedSelection);//设置每次选中的个数(单个,多个)
      w.view->setSelectionBehavior(QAbstractItemView::SelectItems);//设置选中的形式(行,列,单个)
      // view->setColumnHidden(0, true);
      w.view->verticalHeader()->setVisible(false);//隐藏表头
      w.view->resizeColumnsToContents();//列的宽度自适应内容
      w.view->setEditTriggers(QAbstractItemView::NoEditTriggers);
      QHeaderView *header = w.view->horizontalHeader();
      header->setStretchLastSection(true);
      int width = w.geometry().width()/2;
      int height =w.geometry().height()/2;


    w.view->setGeometry(width,height,width,height);
     //w.setCentralWidget(w.view);
     w.view->show();
     w.show();
    }
    else
        return 1;//连接数据库失败
     return a.exec();
}

======================================================================================

含有外键的表的可视化:

首先创建一个表city,然后再创建一个student表,并且加入外键关联到city的id.注意:

这里需要注意一点,如果此时我们在 Qt 中直接使用 INSERT INTO student (name, age, address) VALUES (‘Tom’, 24, 100);

语句,尽管我们的 city 中没有 ID 为 100 的记录,但还是是可以成功插入的。这是因为虽然 Qt 中的 sqlite 使用的是支持外键的 sqlite3,但 Qt 将外键屏蔽掉了。为了启用外键,我们需要首先使用QSqlQuery执行: PRAGMA foreign_keys = ON;

最后直接显示:

Qt使用数据库(2)_第1张图片

如果我们希望将adress显示为外键所关联的表的某一列:

首先创建一个QSqlRelationalTableModel对象。注意,这里我们有一个setRelation()函数的调用。

QSqlRelationalTableModel *model = new QSqlRelationalTableModel();
        model->setTable("student");
        model->setSort(1, Qt::AscendingOrder);
        model->setHeaderData(0, Qt::Horizontal, "id");
        model->setHeaderData(1, Qt::Horizontal, "Name");
        model->setHeaderData(2, Qt::Horizontal, "Age");
        model->setRelation(3, QSqlRelation("city", "id", "name"));
        model->setHeaderData(3, Qt::Horizontal, "Adress");
        model->select();
     // QTableView *view = new QTableView; view->setModel(model);
       w.view->setModel(model);
      w.view->setSelectionMode(QAbstractItemView::ExtendedSelection);//设置每次选中的个数(单个,多个)
      w.view->setSelectionBehavior(QAbstractItemView::SelectItems);//设置选中的形式(行,列,单个)
      // view->setColumnHidden(0, true);
      w.view->verticalHeader()->setVisible(false);//隐藏表头
      w.view->resizeColumnsToContents();//列的宽度自适应内容
      w.view->setItemDelegate(new QSqlRelationalDelegate(w.view));
     // w.view->setEditTriggers(QAbstractItemView::NoEditTriggers);
      QHeaderView *header = w.view->horizontalHeader();
      header->setStretchLastSection(true);//最后一行占据整个窗口

另外这个语句 w.view->setItemDelegate(new QSqlRelationalDelegate(w.view));提供了delegate来作为与用户的交互接口,可以编辑数据.

Qt使用数据库(2)_第2张图片

你可能感兴趣的:(Qt使用数据库(2))