• 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组件上:

    文章出处:https://www.cnblogs.com/LyShark/p/15654747.html
    版权声明:本博客文章与代码均为学习时整理的笔记,博客中除去明确标注有参考文献的文章,其他文章 [均为原创] 作品,转载请 [添加出处] ,您添加出处是我创作的动力!

    如果您恶意转载本人文章并被本人发现,则您的整站文章,将会变为我的原创作品,请相互尊重 !
  • 相关阅读:
    面向对象课程设计-FlappyCharacter(个人)
    学生成绩管理系统——个人博客
    学生成绩管理系统(个人)
    JAVA课程设计个人博客----FlappyBird
    Java课程设计——彩票购买抽奖系统
    彩票抽奖程序—个人博客
    彩票购买抽奖程序——个人博客
    面对对象综合设计-贪吃蛇个人博客
    面向对象综合设计-贪吃蛇
    面向对象程序综合设计—课程设计
  • 原文地址:https://www.cnblogs.com/LyShark/p/15654747.html
Copyright © 2020-2023  润新知