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!
推薦閱讀:
- C/C++ Qt 數據庫與TableView實現多組件聯動
- C/C++ Qt數據庫SqlRelationalTable關聯表詳解
- C/C++ Qt TreeWidget 單層樹形組件應用小結
- C/C++ Qt 數據庫QSql增刪改查組件應用教程
- Qt入門學習之數據庫操作指南