GUI编程之Qt
文章平均质量分 71
跨平台C++图形用户界面应用程序开发框架,C++桌面程序开发设计必备!
繁星蓝雨
Happy coding!
展开
-
qt5.15.2打包应用程序(附带mysql数据库连接)————附带详细步骤
因为Qt程序打包后,遇到了很多问题,例如无法定位程序输入点,数据库驱动无法载入的情况。通过查阅很多资料和实践操作,最终解决了问题。本文就是记录解决问题的方法。3,把之前编译数据库的链接文件,放到运行程序的同级目录下(因为是使用mariadb编译的数据库,所以用的也是mariadb的库文件);1,打开qt命令端软件;2,输入打包命令,例如。原创 2024-07-01 23:15:00 · 287 阅读 · 0 评论 -
qt中数据库和excel互导数据————附带详细步骤和代码
因为需要批量导入和导出数据,所以需要用到excel。实现把数据库的数据导入到excel中,把excel中的数据导出到数据库。这里使用了开源代码库QXlsx。没有设置, QXlsx’s的 CMakeLists.txt 将尝试自己寻找 Qt 版本(5 或 6)。数据库中的login_information表。2,把数据库中表的数据导出到excel中;1,建立数据库连接,同上;原创 2024-07-01 21:30:00 · 1559 阅读 · 0 评论 -
qt 实现模拟实际物体带速度的移动(水平、垂直、斜角度)——————附带完整代码
可以显示属性(继承自。左上(位于第三象限)右上(位于第四象限)右下(位于第一象限)左下(位于第二象限)原创 2024-06-13 23:15:00 · 1057 阅读 · 0 评论 -
编译qt5.15.2(mac/windows)的mysql驱动(附带编译好的文件)
链接:https://pan.baidu.com/s/1m15DbFuFTtXfEyqyOS2cew。因为需要连接到mysql数据库,所以需要连mysql驱动。4,把编译好的mysql放入到如下文件夹。3,编译文件,得到mysql驱动;2,添加mysql的外部关联库;中,把mysql的库文件也放入到。原创 2024-05-21 21:00:00 · 582 阅读 · 0 评论 -
编译Qt6.5.3LTS版本(Mac/Windows)的mysql驱动(附带编译后的全部文件)
因为项目要用到对MYSQL数据库操作,所以需要连接到MYSQL数据库。但是连接需要MYSQL驱动,但是Qt本身不自带MYSQL驱动,需要自行编译。网上有很多qt之前版本的mysql驱动,但是没有找到qt6.5.3版本的,所以只好自己编译。原创 2024-04-29 22:02:10 · 1019 阅读 · 0 评论 -
qt安装历史版本5.15.2
因为需要,所以需要安装qt5的最后一个版本qt5.15.2,但是下载qt安装器后,发现没有想要的版本。后面才发现,可以筛选历史版本进行安装。原创 2024-04-29 22:00:12 · 659 阅读 · 0 评论 -
史上功能最完整Qt的登陆注册界面,你想要的功能都在这里了——————附赠完整代码
文章目录1 界面2 功能3 关键代码3.1 限制字母、数字和字符位数的输入:3.2 MD5码转换3.3 托盘:3.4 菜单栏:3.5 语音播报:3.6 登陆验证:3.7 自动补全密码4 项目源代码1 界面登陆界面:注册界面:主界面:托盘隐藏与显示:菜单栏目显示:2 功能注册账号检测密码不一致;限制账号密码都必须为字母和数字,不能是符号;限制账号和密码的长度;密码记录到数据库时,为MD5码形式;检测重复注册;登陆记住账号;记住密码时,会同时记住原创 2021-09-15 09:29:56 · 4601 阅读 · 3 评论 -
麻将游戏软件————附带核心算法
文章目录0 背景1 软件图片1.1 设置1.2 游戏界面1.3 识别界面2 核心算法2.1 牌类2.2 胡牌2.3 其他(明杠、暗杠、抢杠胡)3 花絮3.1 游戏3.2 识别图片3.3 调试协议4 麻将源代码0 背景因为项目需要,于是使用Qt编写了一个麻将软件。但是后面由于种种原因,软件被弃用了【当时就写了一个月,还是刚学完Qt写的,写的比较粗糙????】,于是现在把项目开源,供大家参考交流、学习。1 软件图片1.1 设置感觉这应该是市面上玩法最多的设置了,不过由于时间原因只实现了一小部分的功能,原创 2021-07-10 14:13:04 · 8060 阅读 · 26 评论 -
Qt 在Windows/Mac/Android下使用日志——————附赠完整代码和示例
文章目录0 背景1 Android环境下1.1 控制日志输出1.2 查看日志2 windwos/Mac0 背景一般情况下,我们在使用编译器运行软件的情况下,都可以打印出调试信息,但是如果是发布后的软件,就不能在编译器上看到调试、出错等日志信息,于是就要通过其他方法查看日志信息,一种比较好的方法,就是把软件日志输出到文件中,这样我们就可以通过文件查看。1 Android环境下结果:这是在编译器中打印的调试的信息:下面为使用adb查看MyRatailLog的日志信息:1.1 控制日志输出控制原创 2021-04-06 20:44:32 · 611 阅读 · 0 评论 -
Qt使用JNI调用Java代码—————附带完整示例
文章目录0 背景1 调用准备2 调用0 背景在开发Android应用时,有些功能无法使用Qt原生或C++来实现其功能,只能调用java代码来实现。因此就涉及到在Qt中调用java的问题。1 调用准备在.pro中加入下面代码,因此来提供对Android库的支持QT += androidextras两个重要的类:QAndroidJniEnvironment:实现JNI的环境,用于异常的检查和清除等功能;QAndroidJniObject:用于调用java方法2 调用QAndroidJniO原创 2021-03-26 00:09:25 · 4229 阅读 · 4 评论 -
Qt Android自动更新————附赠代码和测试源文件
文章目录0 背景1 导入Android文件3 进行自动更新功能编写3.1 调用方法3.2 注意事项4 附赠单元测试文件0 背景因为项目涉及到使用Qt进行自动跟新,在网上的谷歌、百度、360搜索一番后,并且尝试了里面的各种方法,最后为没有成功。在同事的帮助下,完成了Android自动更新的功能,实现的答题思路为:使用Qt的JNI调用Android的java更新代码实现自动更新。最后成功实现了更新,这里提供给需要帮助的同学们。效果:1 导入Android文件1, 打开项目,在里面选择Create原创 2021-03-23 21:33:55 · 1002 阅读 · 3 评论 -
Qt以管理员/非管理员方式打开另一个进程
文章目录0 背景1 使程序具有管理员权限2 以管理员权限打开应用3 启动非管理员权限的应用0 背景因为项目用到自动跟新,需要用主程序打开更新程序进行更新,更新完成后使用更新程序打开主程序。为了更新过程自然,因此不能使用管理员权限打开更新程序,否则会弹出对话框(是否以管理员权限打开应用),所以更新程序就是没有管理员权限的,但是主程序必须拥有管理员权限(启动时以管理员权限打开)才能直接(使用QProcess)打开其他不需要管理员权限的程序,而打开管理员权限的程序有需要调用windwos的系统API函数。经过原创 2021-03-18 12:53:56 · 2246 阅读 · 6 评论 -
Qt在window系统下打印小票——————附带完整代码
文章目录0 背景1 打印方法1.1 直接调用打印设置界面进行打印1.2 直接打印,不出现打印设置界面2 打印类3 打印类的一些测试3.1 测试字体和上下间隙3.2 测试容纳字体的最大宽度4 彩蛋0 背景因为需要用到打印小票的功能,因此通过查询网上相关资料和自己动手实践整理出此文。希望对需要用到这方面的朋友有帮助。先放结果:为了打印这张小票,自己也打印了上百张小票,用来测试字体大小、间距、样式等。1 打印方法在pro文件中加入QT += printsupport #打印1.1原创 2021-03-14 18:18:04 · 1210 阅读 · 5 评论 -
Qt通过post请求发送和拆分json数据(二)———附送完整源代码
文章目录0 背景1 发送json格式的数据1.1 进行post请求的类:1.1 使用post请求类2 发送json数据3 解析json数据0 背景因为项目要用到许多的post请求,因此查询了大量资料加上自己的实践,最后总结出了此文。之前也写过相同主题的文章,不过方法比较麻烦,需要通过调用json格式的数据来进行post请求,此文正是上文的优化。这里推荐几个好用的post请求的软件和网址,软件:Postmanjson数据解析网址1 发送json格式的数据1.1 进行post请求的类:.h#i原创 2021-03-14 13:05:12 · 1502 阅读 · 0 评论 -
Qt Android使用数据库————附代码和详细步骤
文章目录1 自行创建数据库文件2 使用已有的数据库文件1 自行创建数据库文件db1.setDatabaseName("数据库名");虽然方便,但是一般只用于临时的数据库。但是创建后,找不到数据库存放的位置。2 使用已有的数据库文件.pro中添加#设计Android数据库android{ data.files += database/1.db data.path = /assets/database INSTALLS += data}data.files += 源原创 2021-02-03 23:26:55 · 1511 阅读 · 0 评论 -
Qt中使用sqlite进行树状结构查询,查询父节点和子节点查询————附详细代码和解析
文章目录0 背景1 代码2 sql 语句分析2.1关键词解析:2.2 全语句解释:2.3 从任何一个节点出发查询整条链的数据0 背景因为实际用到递归查询数据库表中结果,本想用其他语言实现递归select操作,但是发现sql语句自身也可以进行递归查询,而且效率很高,因此就搜了相关的资料,发现网上很多的代码,但是几乎都没有注解。于是我就决定写一下注解,方便大家理解,使用和测试的环境为Qt,1 代码连接数据库:#ifndef CREATECONNECTION_H#define CREATECONNEC原创 2021-02-03 22:54:01 · 1581 阅读 · 0 评论 -
Qt Android/Windows/Linux 添加SSL认证【error TLS initialization、qt.network.ssl: QSslSocket: OpenSSL >= 1.】
文章目录0 问题1 解决方法0 问题1,发现的问题:在桌面端测试,发现可以正常post请求,但是在Android端运行时,就发现post请求发出去,也收不到信息。由于在真机上进行测试,不能打QDebug调试信息,于是只能把错误直接打印在控件上。2,打印出错信息的方法:事件:QNetworkAccessManager* networkAccessManager; connect(networkAccessManager, &QNetworkAccessManager::原创 2021-01-22 19:23:28 · 1506 阅读 · 6 评论 -
一篇文章带你看懂Qt MVC(模型、视图、代理)编程————附带详细图文和实践代码
文章目录0 背景1 MVC知识1. 1 视图1. 2 代理1.3 模型2 QTableVie数据呈现2.1 使用数据模型2.1.1 使用QStandardItemModel模型2.1.2 使用QSqlQueryModel模型2.2 QTableView的样式设计2.3 QTableView事件2.3.1 选择模型触发的事件2.3.3 代理触发的事件2.3.3.1 使用0 背景因为最近在做数据库、表格方面的应用程序,因此用到了很多这方面的知识,比如QTableView、QStandardItemMode原创 2021-01-20 21:59:57 · 4584 阅读 · 1 评论 -
Qt Android和ios开发配置————附详细步骤
文章目录0 背景1 Android配置2 ios配置0 背景因为工作需要,要用到在移动端开发软件,虽然有更好的xcode和Android Studio来原生开发ios和Android,但是为了节约时间和人员,因此决定只用Qt来实现移动端的开发。往往配置开发环境是最令人头疼的问题,不过比起配置caffe、tensorflow等环境来说,Qt的配置还算比较简单。此文就是记录配置的方法,以备将来使用。1 Android配置前提:安装Qt的时候,选择安装Qt中所有Android的选项。1 打开配置的界面原创 2021-01-06 22:39:51 · 1636 阅读 · 0 评论 -
Linux(Debian)下安装最新Qt5.15.2————附带详细步骤
文章目录0 背景1 安装2 问题0 背景因为工作原因,需要用到linux下的软件,平时使用Qt都是使用Mac和Windows进行开发。原本以为安装会一帆风顺的进行,结果还是遇到了很多坑,此文就是记录这些坑的。1 安装1,下载软件安装包,后缀为.run2,cd进入安装的文件目录下,输入以下指令:授予权限,chmod 755 qt-unified-linux-x64-4.0.1-online.run执行安装,sudo ./qt-unified-linux-x64-4.0.1-onli原创 2021-01-05 18:53:03 · 9588 阅读 · 0 评论 -
Qt添加工具栏按钮————附详细步骤
文章目录0 前提1 方法一:代码2 方法二:设计师界面0 前提需要在MainWindow中进行创建1 方法一:代码 //工具栏中创建打开文件 QAction *actOpen = new QAction(QIcon(":/img/icons/open.bmp"), tr("打开文件(&O)"), this); ui->toolBar->addAction(actOpen); ui->toolBar->setToolButtonStyle(原创 2021-01-03 11:37:06 · 14629 阅读 · 6 评论 -
Qt导入资源文件———附详细步骤
文章目录0 效果1 操作0 效果1 操作1, 对项目右键单击,然后选择Add New2 ,选择项目为资源文件3,此时输入的名字,为qrc的前缀的名字4 新建完成后,添加文件前缀,点击Add Prefix,在前缀里输入前缀名字5 添加文件,点击Add Files,选择文件【可以按住shift,来拖动选择全部文件】,然后点击打开6 按下ctr + S或者ctr + B来进行保存,资源文件就导入成功了另一种方法为:1 在第三步之后,对res.qrc右键单击选择使用普通文原创 2021-01-03 11:27:23 · 3798 阅读 · 0 评论 -
Qt Widgets和QML Quick的区别
文章目录0 背景1 结论0 背景在接触Qt的编程过程,有一个概念一直在我脑遍徘徊,到底是学QML、Qucik还是Widgets,Widget会被放弃吗?这篇文档就是我查阅资料和书籍后得到的结果总结。1 结论C++ Widgets的编程主要是针对桌面端应用程序,而QML、Quick主要是针对移动应用程序。因为QML、Quick的出现是主要为开发小屏幕的可伸缩【解决不同屏幕大小的兼容性】、动态触控的轻量级手机端应用,使用Quick来调用OpenGL渲染界面。两个的定位不用,因此Widgets不会被放原创 2021-01-02 22:38:16 · 1112 阅读 · 0 评论 -
浅谈Qt的发展
文章目录1 过往2 目前2.1 优点:2.2 不足:3 未来1 过往Qt从1991年首个版本发布,到1995年第一个商业版本发行(Windows/Unix【都只有专利授权版本】)。随后就开始不断的更新换代,2001年发布3.0版本:3.2版本对Mac增加GPL2005年发布4.0版本:与上一个版本API和二进制不兼容,2009年开源框架,增加LGPL协议4.7版本引入QML开发移动端应用2012年发布5.0版本:引入全新的硬件图形处理,完善QML和JavaScript5原创 2021-01-02 22:11:09 · 1130 阅读 · 0 评论 -
Qt TCP接收错误帧头处理办法————附带代码和思路
0 背景就算是TCP传输,也会存在因为网络不稳定或其他原因,导致传输到客户端的数据丢失了部分数据,导致拆包的时候,无法正常拆包(比如帧头带的长度显示整个帧体(包括帧头的长度是10个字节),但是实际收到的只有7个长度,这就会导致把下一帧的枕头错误的读3个字节到上一帧的帧体中,导致数据错位,)。那如何处理呢?1 解决丢掉本次接收的接收的数据,也就是进行一次下面的操作,然后再按正常拆包流程继续拆包:QTcpSocket* tcpSocket;tcpSocket->readAll();但是这样的原创 2020-09-13 17:56:09 · 1570 阅读 · 1 评论 -
Qt解决TCP快速拆包问题
0 背景一般使用TCP传输数据都会涉及到粘包和拆包的问题,而Qt写的程序多作为客户端,因此主要解决的问题是拆包的问题。面对一次发来了大量的数据包,但是信号却只触发一次,也就是只做了一次拆分了,那就会导致有一部分后面的数据包没有得到处理,那怎么处理这种情况呢?1 处理使用递归处理,设置递归条件来再次处理,设置递归边界作为跳出处理。例如: //套接字 QTcpSocket* tcpSocket; qint64 totalBytes = 0;//发送数据的总大小 qint64 re原创 2020-09-13 16:40:35 · 2245 阅读 · 2 评论 -
Qt菜单栏创建帮助说明————附带效果和详细代码
文章目录0 效果1 实现1.1 创建名称和位置1.2 关联信号和槽函数1.3 编写事件0 效果开始:中间步骤结束:1 实现1.1 创建名称和位置在ui设计界面新建需要的菜单名称1.2 关联信号和槽函数找到对象的名称在类的构造函数中编写函数: connect(ui->action_A, &QAction::triggered, [=](){ QWizard wizard(this); wizard.setOp原创 2020-09-13 12:59:14 · 1070 阅读 · 4 评论 -
Qt创建托盘————附详细代码
文章目录0 效果1 实现1.1 .h文件中,声明变量和方法1.2 初始化托盘:1.3 创建托盘1.4 点击事件0 效果何所谓托盘呢?也就是最小化后隐藏到任务栏,效果如下图所示:1 实现1.1 .h文件中,声明变量和方法 //窗口任务栏属性 QSystemTrayIcon *trayIcon; QMenu *trayMenu ; void iconActivated(QSystemTrayIcon::ActivationReason);原创 2020-09-13 12:20:51 · 762 阅读 · 0 评论 -
Qt使用漂亮的图标和字体(Font Awesome)————附代码实例
文章目录0 背景1 使用1.1 法一1.2 法二0 背景Font Awesome是 Twitter Bootstrap设计的完美图标字体,是css框架的网页字体图标库,在网页中经常出现。它的官网,下面放一些介绍:1 使用1.1 法一先引入资源文件:编写帮助类辅助使用:具体的图标对应的Unicode可以查看参考手册#ifndef FONTAWESOMEICONS_H#define FONTAWESOMEICONS_H#include <QFont>#include &原创 2020-09-13 11:10:28 · 4525 阅读 · 0 评论 -
Qt 自适应分辨率————附带思路和详细代码
0 背景因为程序需要运行在不同的电脑上,而不同的电脑有着不同的分辨率,但是有些较小的分辨不足以容纳程序的界面,会导致程序界面显示不全,于是就要做到自适应分辨率,根据屏幕分辨率来调整程序界面大小。1 代码解读要做到自适应,要实现的其实就是根据分辨率来调整控件的位置和宽高、字体的大小。原理:在程序窗口尺寸变化时,即首先获得程序窗口的缩放比例【高的比(horRatio),宽的比例(verRatio)】,然后对各个控件的位置X,Y以及宽度width和高度height进行相应比例的缩放即可。定义结构体存储要转载 2020-09-13 00:29:37 · 7269 阅读 · 0 评论 -
Qt 线程池(QRunnable/QThreadPool)简述————附代码事例
文章目录0 背景1 QRunnable与QThreadPool2 线程池原理简述2.1 源代码解析2.1.1 任务2.1.2线程池2.1.3 流程解读0 背景对于频繁创建和销毁线程,频繁切换线程对与系统资源是极大的浪费,为了提高cpu利用效率,于是产生了分装好了的线程池用于管理线程。1 QRunnable与QThreadPoolclass DealData2: public QRunnable{ void run() override{ qDebug()<<"线程原创 2020-09-12 21:27:43 · 3750 阅读 · 0 评论 -
Qt多线程简述————moveToThread/QThread
文章目录0 背景1 moveToThread自动化管理线程【推荐】2 继承重写QThread0 背景因为项目需要处理TCP传来的特别快的数据,每秒600次,核算差不多1.6ms一次,如果单用一个主线程来处理特别容易卡死(因为虽然主线程接受数据很快,但是处理数据就会特别慢(相较与接受数据),就会导致来不及接受接下来的数据),因此需要用到多线程来处理。以前都是单核计算机时,多线程其实都是并发的,也就是(微观上)多个线程轮换使用cpu,宏观上看起来是“同时”执行的,因此总体上效率并没有明显的提升。但是多核计原创 2020-09-12 18:57:59 · 1599 阅读 · 0 评论 -
Qt中TCP保持心跳回复和断开重连
文章目录1 注册套接字2 编写处理事件2.1 客户端(保持心跳和断开重连)2.2 服务器1 注册套接字类声明中,声明变量//是否是客户端#define isClient 1class ShowImage : public QWidget{ Q_OBJECTpublic: ShowImage(QWidget *parent = nullptr); ~ShowImage();private: //服务器专属,用于建立监听事件 QTcpServer tcpServ原创 2020-09-12 09:56:00 · 4871 阅读 · 0 评论 -
Qt网络传输中常见变量之间的相互转换—————附带详细代码
文章目录0 背景1 QByteArray与int1.1 QByteArray【16进制】转int1.2 int【10进制】转QByteArray2 QByteArray与QString2.1 QByteArray转QString2.1.1 QByteArray转16进制的QString2.2 QString转QByteArray2.2.1 16进制的QString转QByteArray:3 QString和int3.1 QString转int3.2 int转QString4 结构体转QByteArray5原创 2020-09-11 23:35:02 · 1481 阅读 · 0 评论 -
qt中lambda简述——————附带实际代码案例
文章目录0 背景1 介绍1.1 捕获的列表1.2 形参列表2 使用2.1 特别短小的槽函数(发挥匿名函数的“一次性函数作用”)0 背景qt中经常会使用信号来调用槽函数,但是有时候槽函数特别短,有诸多不便,因此找寻一种解决方法,发现了lambda表达式。1 介绍结构[捕获的列表](形参列表)mutable{函数体}1.1 捕获的列表捕获形式 说明[] 不捕获任何外部变量[变量名, …] 默认以值得形式捕获指定的多个外部变量(用逗号分隔),如果引用捕获,需要显示声明(使用&说明符)原创 2020-08-31 23:53:04 · 727 阅读 · 0 评论 -
Qt发送和解析JSON数据(通过使用qml调用js来post请求)————附带详细代码和事例
文章目录0 背景1 发送数据1.1 发送和接受数据调用的js方法:1.2 qml(用于调用js方法)1.3 调用方法1.4 处理JSON返回值2 发送数据2.1 发送单个数据2.2 发送结构体0 背景因为登陆账号和发送一些数据需要要用到http请求去发送和接受JSON数据,所以查阅了相关资料,加上自己的实践,整理出如下博文。1 发送数据1.1 发送和接受数据调用的js方法:// GETfunction get(url, success, failure){ var xhr = new原创 2020-08-31 23:11:33 · 3009 阅读 · 0 评论 -
Qt如何把QString写入txt文件中
文章目录1 示范代码1 示范代码由于write不能把QString直接写入文件中,因此有两种方法来处理:1 使用QTextStream类(中英文都可以存)//读入文件 QFile file; file.setFileName("C:/Users/Admin/Desktop/data2/1.txt"); QByteArray data; if(file.open(QIODevice::ReadOnly)){ data = file.readAll();原创 2020-08-19 11:51:18 · 12793 阅读 · 0 评论 -
Qt更改按钮样式 (以QSpinBox使用左右按钮样式为例)
#include#include#includetypedef long long LL;int main(int argc, char** argv){long long n,m;scanf("%lld%lld", &n, &m);std::vector<std::pair<LL, LL>>A, B;while(n–){LL tempX, tempY;char pointType;scanf("%lf%lf %c", &tempX原创 2020-08-15 14:32:46 · 6508 阅读 · 0 评论 -
qt打包exe软件
文章目录1 windows打包应用程序1 windows打包应用程序打开Qt自带的命令端,然后在命令端中输入windeployqt,把编译的release运行出来的程序exe拖进命令端(为了方便可以单独建立一个文件夹,把exe复制进去,再exe拖进命令端),下面是原始编译后的exe路径:这是新建文件夹后的路径:把exe拖进命令端后:然后运行,效果如下,如果还有其他库,如opencv’库,可以opencv库也复制到exe的当前路径下。...原创 2020-07-17 12:02:02 · 430 阅读 · 0 评论 -
QPainter::begin: Painter already active问题解决方案
文章目录1 问题重现2 原因3 解决方法1 问题重现2 原因重新实现paintEvent函数时,如果使用QPainter painter(this);,再使用begin、end则会重复包含QPainter。官方给出的主意事项:Note that most of the time, you can use one of the constructors instead of begin(), and that end() is automatically done at destruction.原创 2020-07-17 11:29:22 · 5050 阅读 · 2 评论