在上一篇博文 《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组件上:

java get乱码 java乱码问题

今天来说说Java数据转换的乱码问题,乱码问题的原因有哪些呢常用的字符集:UTF-8, GBK, ISO-8859-1,等 从字符到集字节是编码(电脑是二进制),从字节到字符是解码:乱码的原因:1:可能字节数不够,导致解码乱码。     2:编码和解码的字符集不统一。package com.jianshun; import java.io.Unsuppor

.net数据库编程 .net 数据库框架

前面写好了据库操作、实体类有关的属性,这一节写sql语句生成部分首先我编写了一个sql语句生成的接口public interface GetSql /// <summary> /// 新增 /// </summary> /// <typeparam name="T">类名</typ

java 带输出参数的方法 java输出%s

Java格式化输出2019-07-06  11:35:55  by冲冲1. 输出字符串 %s 1 /*** 输出字符串 ***/ 2 // %s表示输出字符串,也就是将后面的字符串替换模式中的%s 3 System.out.printf("%s", new Integer(1212)); 4 //