C/C++ Qt 數據庫與TreeView組件綁定詳解

在上一篇博文《C/C++ Qt 數據庫QSql增刪改查組件應用》介紹瞭Qt中如何使用SQL操作函數,並實現瞭對數據庫的增刪改查等基本功能,從本篇開始將實現數據庫與View組件的綁定,通過數據庫與組件關聯可實現動態展示數據庫中的表記錄。

我們先以TreeView組件為例,簡單介紹一下如何實現組件與數據的綁定,首先我們需要創建一個表並插入幾條測試記錄,運行如下代碼實現建庫建表.

#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QSqlRecord>
#include <iostream>
#include <QStringList>
#include <QString>
#include <QVariant>

#include <QDataWidgetMapper>
#include <QtSql>

void Init()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("./lyshark.db");
     if (!db.open())
     {
            std::cout << db.lastError().text().toStdString()<< std::endl;
            return;
     }

    // 執行SQL創建表
    db.exec("DROP TABLE LyShark");
    db.exec("CREATE TABLE LyShark ("
                    "id INTEGER PRIMARY KEY AUTOINCREMENT, "
                    "name VARCHAR(40) NOT NULL, "
                    "age INTEGER NOT NULL)"
         );

    // 逐條插入
    db.exec("INSERT INTO LyShark(name,age) VALUES('admin',22)");
    db.exec("INSERT INTO LyShark(name,age) VALUES('lyshark',25)");
    db.exec("INSERT INTO LyShark(name,age) VALUES('zhangsan',22)");
    db.exec("INSERT INTO LyShark(name,age) VALUES('wangwu',22)");

    db.commit();
}

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Init();
}

執行建庫建表後,數據庫內記錄如下:

有瞭數據表以後,接著就需要將數據表中的記錄與View組件進行綁定,綁定組件首先需要調用QSqlQueryModel查詢數據表中的記錄,當查詢到記錄以後,調用QItemSelectionModel()將該記錄綁定到對應的模型中,最後調用ui->treeView->setModel(qryModel);以及ui->treeView->setSelectionModel(theSelection);將該模型顯示在TreeView組件內,這段代碼如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QSqlRecord>
#include <iostream>
#include <QStringList>
#include <QString>
#include <QVariant>

#include <QDataWidgetMapper>
#include <QtSql>

#include <QStandardItem>
#include <QStringList>
#include <QStringListModel>

// 定義數據模型指針
QSqlQueryModel *qryModel;          // 數據模型
QItemSelectionModel *theSelection; // 選擇模型
QDataWidgetMapper *dataMapper;     // 數據界面映射

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("./lyshark.db");
     if (!db.open())
     {
            std::cout << db.lastError().text().toStdString()<< std::endl;
            return;
     }

     // 查詢數據表中記錄
     qryModel=new QSqlQueryModel(this);
     qryModel->setQuery("SELECT * FROM LyShark ORDER BY id");
     if (qryModel->lastError().isValid())
     {
         return;
     }

     // 設置TableView表頭數據
     qryModel->setHeaderData(0,Qt::Horizontal,"ID");
     qryModel->setHeaderData(1,Qt::Horizontal,"Name");
     qryModel->setHeaderData(2,Qt::Horizontal,"Age");

     // 將數據綁定到模型上
     theSelection=new QItemSelectionModel(qryModel);
     ui->treeView->setModel(qryModel);
     ui->treeView->setSelectionModel(theSelection);
     ui->treeView->setSelectionBehavior(QAbstractItemView::SelectRows);
}

MainWindow::~MainWindow()
{
    delete ui;
}

運行代碼後,程序會從數據庫內取出結果並輸出到TreeView組件上:

到此這篇關於C/C++ Qt 數據庫與TreeView組件綁定詳解的文章就介紹到這瞭,更多相關C++ Qt 數據庫與TreeView組件綁定內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: