最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++?Qt?數(shù)據(jù)庫與TreeView組件綁定詳解

 更新時間:2021年12月07日 11:24:54   作者:LyShark  
本篇文章主要介紹了QT數(shù)據(jù)庫與View組件的綁定,通過數(shù)據(jù)庫與組件關(guān)聯(lián)可實(shí)現(xiàn)動態(tài)展示數(shù)據(jù)庫中的表記錄。感興趣的小伙伴可以了解一下

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

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

有了數(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;
}

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

到此這篇關(guān)于C/C++ Qt 數(shù)據(jù)庫與TreeView組件綁定詳解的文章就介紹到這了,更多相關(guān)C++ Qt 數(shù)據(jù)庫與TreeView組件綁定內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言數(shù)據(jù)結(jié)構(gòu)通關(guān)時間復(fù)雜度和空間復(fù)雜度

    C語言數(shù)據(jù)結(jié)構(gòu)通關(guān)時間復(fù)雜度和空間復(fù)雜度

    對于一個算法,其時間復(fù)雜度和空間復(fù)雜度往往是相互影響的,當(dāng)追求一個較好的時間復(fù)雜度時,可能會使空間復(fù)雜度的性能變差,即可能導(dǎo)致占用較多的存儲空間,這篇文章主要給大家介紹了關(guān)于C語言時間復(fù)雜度、空間復(fù)雜度的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • Sublime Text 3 實(shí)現(xiàn)C語言代碼的編譯和運(yùn)行(示例講解)

    Sublime Text 3 實(shí)現(xiàn)C語言代碼的編譯和運(yùn)行(示例講解)

    下面小編就為大家?guī)硪黄猄ublime Text 3 實(shí)現(xiàn)C語言代碼的編譯和運(yùn)行(示例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • C語言實(shí)現(xiàn)簡易三子棋游戲

    C語言實(shí)現(xiàn)簡易三子棋游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡易三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Qt多線程實(shí)現(xiàn)網(wǎng)絡(luò)發(fā)送文件功能

    Qt多線程實(shí)現(xiàn)網(wǎng)絡(luò)發(fā)送文件功能

    這篇文章主要為大家詳細(xì)介紹了Qt多線程實(shí)現(xiàn)網(wǎng)絡(luò)發(fā)送文件功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 詳解C++中特殊類設(shè)計

    詳解C++中特殊類設(shè)計

    這篇文章主要為大家詳細(xì)介紹了C++中關(guān)于特殊類設(shè)計的相關(guān)知識,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C++有一定的幫助,感興趣的可以了解一下
    2023-07-07
  • C++ 命名空間避免命名沖突的實(shí)現(xiàn)

    C++ 命名空間避免命名沖突的實(shí)現(xiàn)

    命名空間是C++中用來避免命名沖突的一種機(jī)制,本文主要介紹了C++ 命名空間避免命名沖突的實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • C語言結(jié)構(gòu)體超詳細(xì)講解

    C語言結(jié)構(gòu)體超詳細(xì)講解

    C語言結(jié)構(gòu)體(Struct)從本質(zhì)上講是一種自定義的數(shù)據(jù)類型,只不過這種數(shù)據(jù)類型比較復(fù)雜,是由?int、char、float?等基本類型組成的。你可以認(rèn)為結(jié)構(gòu)體是一種聚合類型
    2022-04-04
  • C/C++ 中const關(guān)鍵字的用法小結(jié)

    C/C++ 中const關(guān)鍵字的用法小結(jié)

    C++中的const關(guān)鍵字的用法非常靈活,而使用const將大大改善程序的健壯性。這篇文章主要介紹了C/C++ 中const關(guān)鍵字的用法,需要的朋友可以參考下
    2020-02-02
  • Qt實(shí)現(xiàn)定時器的兩種方法分享

    Qt實(shí)現(xiàn)定時器的兩種方法分享

    這篇文章主要為大家詳細(xì)介紹了Qt中實(shí)現(xiàn)定時器的兩種不同方法,文中的示例代碼講解詳細(xì),對我們了解Qt有一定的幫助,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-11-11
  • C++中的數(shù)組引用和指針引用

    C++中的數(shù)組引用和指針引用

    這篇文章主要介紹了C++中的數(shù)組引用和指針引用詳細(xì)的相關(guān)資料,需要的朋友可以參考下面文章內(nèi)容
    2021-09-09

最新評論

北碚区| 商洛市| 敦化市| 上饶县| 渭南市| 垣曲县| 新丰县| 门头沟区| 浦北县| 竹北市| 南开区| 永吉县| 仪征市| 长乐市| 保康县| 义马市| 上栗县| 东海县| 苏尼特右旗| 湄潭县| 乡城县| 贞丰县| 鲁山县| 枞阳县| 林西县| 潞城市| 博野县| 南木林县| 塘沽区| 武山县| 雅江县| 苍南县| 武强县| 鲁甸县| 桓台县| 交城县| 天柱县| 松江区| 永靖县| 封开县| 伊川县|