XXX项目总结

2023-10-31

目录

1、SQLite 数据库

 1.1、创建数据库连接

1.2、打开数据库连接

1.3、关闭数据库连接

1.4、查询数据库示例 (结果为单条数据)

1.5、查询数据库示例2(结果为多条数据)

2、数据转换

2.1、QString 转 std::string

2.2、std::string 转 QString

2.3、QByteArray 转 QImage

2.4、QImage 转 QByteArray


第一次写 C++ 项目,下面总结的是本人开发过程中需要搜索的东西。

总结一下,便于以后查阅!

(会持续补充)

1、SQLite 数据库

Qt 自带 Sqlite 数据库, 不需要安装,直接使用便可。

 1.1、创建数据库连接

#include <QtSql>    // 包含 sql 头文件

// 创建数据库连接
void createDatabase()
{
    // 连接的数据库地址 (有就打开,没有就创建)
    QString dbName("D://XXX//xxx.db");
    // 指定数据库是 SQLite 数据库
    QSqlDatabase m_sqlDB = QSqlDatabase::addDatabase("QSQLITE");
    m_sqlDB.setDatabaseName(dbName);
}

1.2、打开数据库连接

// 打开数据库连接
void openDatabase()
{
    m_sqlDB.open();
}

1.3、关闭数据库连接

// 关闭数据库连接
void closeDatabase()
{
    m_sqlDB.close();
}

1.4、查询数据库示例 (结果为单条数据)

// 根据学生id 查询学生信息
Student* getStudentById(int id)
{
    // 打开数据库连接
    m_DBManager->openDatabase();
    QSqlQuery query = QSqlQuery(m_sqlDB);
    // 写查询 sql    (带参数, :id 是占位符)
    query.prepare("select id, age, name from student where id = :id");
    // 给占位符赋值
    query.bindValue(":id", id);
    // 执行 sql
    query.exec();
    // 取第一条数据 (当结果只有一条数据时这样操作,否则取不到值)
    query.first();
    
    Student* stu = new Student();
    stu->id = query.value(0).toInt();    // id, value可以根据下标来取值
    stu->age = query.value("age").toInt();    // 年龄,value可以根据名称来取值
    // 名称(转为std::string 格式)
    stu->name = std::string(query.value("name").toString().toLocal8Bit());    
    
    // 关闭数据库连接(这一步不要忘了)
    m_DBManager->closeDatabase();

    return stu;
}

1.5、查询数据库示例2(结果为多条数据)

// 根据学生id 查询学生信息
std::vector<Student*> getAllStudent()
{
    // 打开数据库连接
    m_DBManager->openDatabase();
    QSqlQuery query = QSqlQuery(m_sqlDB);
    // 写查询 sql  
    query.exec("select id, age, name from student");

    std::vector<Student*> students;    // 创建学生集合
   
    // 多条数据循环取值
    while(query.next())
    {
        Student* stu = new Student();
        stu->id = query.value(0).toInt();    // id, value可以根据下标来取值
        stu->age = query.value("age").toInt();    // 年龄,value可以根据名称来取值
        // 名称(转为std::string 格式)
        stu->name = std::string(query.value("name").toString().toLocal8Bit()); 
        students.pushback(stu);
    }
    
    // 关闭数据库连接(这一步不要忘了)
    m_DBManager->closeDatabase();

    return students;
}

2、数据转换

2.1、QString 转 std::string

// 第一种方式 (在数据库中取值时用这种)
std::string std = std::string(query.value(0).toString().toLocal8Bit());

// 第二种方式 
QString aaa = "bbb";
std::string str = aaa.toStdString();

2.2、std::string 转 QString

std::string aaa = "bbb";
QString str = QString::fromStdString(aaa);

2.3、QByteArray 转 QImage

// 假如有一个 ByteArray
ByteArray byteArray = .........;
QImage image;
image.loadFromData(byteArray);
return image;

2.4、QImage 转 QByteArray

QImage image = QImage("c://aaa.png");
QByteArray byteArray;
QBuffer buffer;
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "PNG");
byteArray.append(buffer.data());
return byteArray;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XXX项目总结 的相关文章

  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • 使用Physics.Raycast 和Physics2D.Raycast 检测对象上的点击

    我的场景中有一个空的游戏对象 带有 2D 组件盒碰撞器 我将脚本附加到该游戏对象 void OnMouseDown Debug Log clic 但是当我点击我的游戏对象时 没有任何效果 你有什么想法 如何检测我的盒子碰撞器上的点击 使用光
  • Unix网络编程澄清

    我正在翻阅这本经典书籍Unix网络编程 https rads stackoverflow com amzn click com 0139498761 当我偶然发现这个程序时 第 6 8 节 第 179 180 页 include unp h
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 如何访问另一个窗体上的ListView控件

    当单击与 ListView 所在表单不同的表单中的按钮时 我试图填充 ListView 我在 Form1 中创建了一个方法以在 Form2 中使用 并将参数传递给 Form1 中的方法 然后填充 ListView 当我调试时 我得到了传递的
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 避免 SQLite3 中的 SQL 注入

    我正在尝试找出一种避免 SQL 注入的好简单方法 到目前为止我只能提出两个想法 对用户输入进行 Base64 编码 其实不想这样做 使用正则表达式删除不需要的字符 目前正在使用这个 不确定是否100 安全 这是我当前的代码
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi

随机推荐

  • NUC980开源项目5-安装repo

    上面是我的微信和QQ群 欢迎新朋友的加入 项目码云地址 国内下载速度快 https gitee com jun626 nuc980 open source project 项目github地址 https github com Jun117
  • Pandas 报错 TypeError: ‘Series‘ objects are mutable, thus they cannot be hashed

    一 需求 根据原始 CSV 文件的列 A 的值 添加一列 B 二 尝试 1 1 将 A 列与 B 列对应的值写入字典 dict A 列为 key B 列为 value 2 将 CSV 文件处理为 DataFrame 3 import pan
  • Python入门02:详细来了解一下Requests库

    那个叫做 Urllib 的库让我们的 python 假装是浏览器 接下来我们要来玩一个新的库 这个库的名称叫做 Requests 这个库比 urllib 可是要牛逼一丢丢的 毕竟 Requests 是在 urllib 的基础上搞出来的 通过
  • 个人笔记随记——在CSDN写随记原因,部分是为了自己复习,查看。

    在CSDN写随记原因 部分是为了自己复习 查看 部分原因是用来分享经验 大家共同进步 之前我的几个电脑里面有个自己的个人数据库 所以笔记都在那里记录 因为现在除了码字 经常不携带电脑 导致笔记不能随时观看 所以现在即在CSDN开了个人博客
  • C++前置声明用法

    前置声明的目的是避免在某个 h文件中include其他头文件 取而代之的是用class struct 声明 类的前置声明就是告诉编译器有这么一个类 它的名字是XXX 甚至不需要知道它具有哪些成员 注意 这里只是声明类 没有分配空间 实例化成
  • kubernetes结合portworx

    参考网址 https docs portworx com scheduler kubernetes install html https docs portworx com scheduler kubernetes support html
  • IDEA配置JDBC

    IDEA配置JDBC 驱动下载 MySQL 首先进入MySQL官网 进入downloads 选择页面最下方 MySQL Community GPL Downloads 选择Connector J link 选择plantform indep
  • 『网络安全』蜜罐到蜜网入门指南(二)蜜罐的起源、作用及分类

    原创不易 点个赞呗 如果喜欢 欢迎随意赞赏 前言 大家好 网络安全 蜜罐到蜜网入门指南 进入第二篇 在第一篇 我们由网络安全入手 由浅入深 引出蜜罐概念 从这一篇开始 我们将主要围绕蜜罐 honeypot 密网 honeynet 继续编写后
  • 前端生成PDF文件实现方案

    一 技术选型 1 html转换成canvas后生成图片导出pdf 本文选用 html转canvas插件 html2canvas是一款将HTML代码转换成Canvas的插件 canvas生成pdf jsPDF是一个使用Javascript语言
  • LeetCode专题:栈和队列(持续更新,已更17题)

    目录 LeetCode150 逆波兰表达式求值 问题描述 代码分析 LeetCode225 用队列实现栈 问题描述 代码分析 LeetCode232 用栈实现队列 问题描述 代码分析 O n 解法 均摊 O 1 解法 关于 均摊复杂度 的说
  • 136. Single Number

    class Solution public int singleNumber vector
  • 用border渐变色实现UI 标题头等高短竖线

    现在的UI 越来越喜欢给标题前面加上短竖线 大家通常的方法 一个是画div图形 用position 方式来定位 一个是用 伪类来给前面增加给元素 实现短竖线 今天在这里实现无dom 的第三种方式 border渐变色 废话不多说 用用到的有
  • 程序员视角m1 Macbook air使用指南和指令备忘录

    m1 Mac使用指南指令备忘录 硬件外设 外接显示器HiDpi homebrew 必备网站 软件推荐 Parallels Desktop Silicon Bob IINA iterm2远程 mysql和redis启动 OhMyZsh设置 磁
  • 1016 部分A+B (15 分)- PAT乙级真题

    题滴链接https pintia cn problem sets 994805260223102976 problems 994805306310115328 1016 部分A B 15 分 正整数 A 的 D A 为 1 位整数 部分 定
  • 实现分页展示

    当数据量较多时 用户需要拖动页面才可以浏览更多消息 分页显示的步骤 思路 确定每页显示的数据量 确定分页显示所需的总页面 编写SQL查询语句 实现数据查询 在JSP页面中进行分页显示设置 一 计算显示总页数 1 select count 1
  • ES6代码转为ES5代码的在线转换工具以及运行工具

    学习es6是一个很有意思的过程 里面新增的语法及语法糖都能大大减少我们的代码量 但有些语法是目前浏览器无法支持的 所以我们需要转换一下 为了方便学习以及测试 下面推荐两款使用的es6在线转换工具 1 Babeljs 在线转换地址 2 es6
  • 神经网络学习小记录70——Keras 使用Google Colab进行深度学习

    神经网络学习小记录70 Keras 使用Google Colab进行深度学习 注意事项 学习前言 什么是Google Colab Colab官网 利用Colab进行训练 一 数据集与预训练权重的上传 1 数据集的上传 2 预训练权重的上传
  • 在idea中如何在控制台输出日志?——用log4j

    简单记录下idea中如何配置使得在控制台输出日志 首先做个对比 输出日志和不输出日志有什么区别 下面的例子是我在学习mybatis中查询数据库时返回的结果 不输出日志的结果显示如下 输出日志的结果显示如下 经过对比 是不是在输出结果的同时把
  • java 语言 if else语句的使用方法

    if else语句的结果如下 if 条件1 代码块1 else if 条件2 代码块2 else 代码块3 if else语句使用方法 如果条件1是true则执行 代码块1 如果条件2是true则执行代码块2 否则执行代码块3 下面是例子
  • XXX项目总结

    目录 1 SQLite 数据库 1 1 创建数据库连接 1 2 打开数据库连接 1 3 关闭数据库连接 1 4 查询数据库示例 结果为单条数据 1 5 查询数据库示例2 结果为多条数据 2 数据转换 2 1 QString 转 std st