zoukankan      html  css  js  c++  java
  • 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
    版权声明:本博客文章与代码均为学习时整理的笔记,博客中除去明确标注有参考文献的文章,其他文章 [均为原创] 作品,转载请 [添加出处] ,您添加出处是我创作的动力!

    如果您恶意转载本人文章并被本人发现,则您的整站文章,将会变为我的原创作品,请相互尊重 !
  • 相关阅读:
    安装 Ruby, Rails 运行环境
    saas 系统租户个性化域名&&租户绑定自己域名的解决方案
    caddy server 几个常用插件
    caddy server && caddyfile
    caddy server 默认https && http2的验证
    caddy server 了解
    redis 连接池的一些问题
    Hangfire 任务调度
    Spring Cloud feign 服务超时处理
    windows 2016 容器管理
  • 原文地址:https://www.cnblogs.com/LyShark/p/15654747.html
Copyright © 2011-2022 走看看