溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C/C++?Qt數(shù)據(jù)庫與TreeView組件綁定的方法是什么

發(fā)布時間:2021-12-07 14:01:50 來源:億速云 閱讀:129 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“C/C++ Qt數(shù)據(jù)庫與TreeView組件綁定的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“C/C++ Qt數(shù)據(jù)庫與TreeView組件綁定的方法是什么”吧!

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

#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í)行建庫建表后,數(shù)據(jù)庫內(nèi)記錄如下:

C/C++?Qt數(shù)據(jù)庫與TreeView組件綁定的方法是什么

有了數(shù)據(jù)表以后,接著就需要將數(shù)據(jù)表中的記錄與View組件進(jìn)行綁定,綁定組件首先需要調(diào)用QSqlQueryModel查詢數(shù)據(jù)表中的記錄,當(dāng)查詢到記錄以后,調(diào)用QItemSelectionModel()將該記錄綁定到對應(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;
}

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

C/C++?Qt數(shù)據(jù)庫與TreeView組件綁定的方法是什么

到此,相信大家對“C/C++ Qt數(shù)據(jù)庫與TreeView組件綁定的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI