日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

C/C++?Qt?數(shù)據(jù)庫(kù)與TreeView組件綁定詳解_C 語(yǔ)言

作者:LyShark ? 更新時(shí)間: 2021-12-18 編程語(yǔ)言

在上一篇博文《C/C++ Qt 數(shù)據(jù)庫(kù)QSql增刪改查組件應(yīng)用》介紹了Qt中如何使用SQL操作函數(shù),并實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫(kù)的增刪改查等基本功能,從本篇開(kāi)始將實(shí)現(xiàn)數(shù)據(jù)庫(kù)與View組件的綁定,通過(guò)數(shù)據(jù)庫(kù)與組件關(guān)聯(lián)可實(shí)現(xiàn)動(dòng)態(tài)展示數(shù)據(jù)庫(kù)中的表記錄。

我們先以TreeView組件為例,簡(jiǎn)單介紹一下如何實(shí)現(xiàn)組件與數(shù)據(jù)的綁定,首先我們需要?jiǎng)?chuàng)建一個(gè)表并插入幾條測(cè)試記錄,運(yùn)行如下代碼實(shí)現(xiàn)建庫(kù)建表.

#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;
     }

    // 執(zhí)行SQL創(chuàng)建表
    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();
}

執(zhí)行建庫(kù)建表后,數(shù)據(jù)庫(kù)內(nèi)記錄如下:

有了數(shù)據(jù)表以后,接著就需要將數(shù)據(jù)表中的記錄與View組件進(jìn)行綁定,綁定組件首先需要調(diào)用QSqlQueryModel查詢數(shù)據(jù)表中的記錄,當(dāng)查詢到記錄以后,調(diào)用QItemSelectionModel()將該記錄綁定到對(duì)應(yīng)的模型中,最后調(diào)用ui->treeView->setModel(qryModel);以及ui->treeView->setSelectionModel(theSelection);將該模型顯示在TreeView組件內(nèi),這段代碼如下:

#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>

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

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;
     }

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

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

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

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

運(yùn)行代碼后,程序會(huì)從數(shù)據(jù)庫(kù)內(nèi)取出結(jié)果并輸出到TreeView組件上:

原文鏈接:https://www.cnblogs.com/LyShark/p/15654747.html

欄目分類
最近更新