
QT编程
文章平均质量分 56
围绕着QT,记录工作、学习当中遇到的各种问题和解决方法。
程序员如山石
以前从事虚拟化的工作,现在从事嵌入式方面的工作。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
显示当前时间
本文介绍了如何开发一个显示精确到秒的桌面时钟程序。作者因系统自带时钟不显示秒,而选择自己开发一个Qt程序来实现该功能。程序使用QLCDNumber控件显示时间格式字符串(支持"-"、":"等特殊字符),通过QTimer定时器每秒触发一次时间更新。文章提供了核心代码实现,包括界面布局、时间显示和定时器设置,并分享了程序运行效果图和视频演示。最后总结了关键技术点:QTimer的timeout事件机制和QLCDNumber的字符串显示功能,同时提供了程序下载地址。这个案例展原创 2025-08-01 14:51:01 · 374 阅读 · 0 评论 -
神奇的数据跳变
摘要:本文描述了一个奇怪的软件数据跳变问题,数据在158和10之间不断变化。作者通过排查发现:1)问题仅出现在实验室机器上;2)杀毒软件未检测到病毒;3)最终找到了问题根源。文章提供了关键代码片段,包括界面布局、学生成绩初始化和数据显示部分,展示了Qt框架下的实现方式。该问题反映了程序员工作中可能遇到的典型调试场景。原创 2025-07-31 17:35:24 · 360 阅读 · 0 评论 -
QMap清空手动分配的内存
摘要:本文探讨了在QMap中使用堆内存时的内存管理问题。当QMap存储手动分配的指针时,直接调用clear()会导致内存泄漏。文章通过示例展示了正确做法:先遍历删除指针对象,再清空QMap。同时推荐使用智能指针(如shared_ptr)进行内存管理,它能自动释放内存,避免手动管理带来的风险。智能指针通过生命周期自动管理内存,在作用域结束时释放资源,有效防止内存泄漏和野指针问题。(150字)原创 2025-06-04 15:06:48 · 962 阅读 · 0 评论 -
神奇的自重启功能
这一个功能可以让程序变化,通过重启加载不同的配置,而不是程序一下子加载所有的配置,导致了程序很复杂。原创 2025-04-30 10:25:14 · 466 阅读 · 0 评论 -
Qt程序 Windows打包
windeployqt.exe是Qt自带的命令行工具,专门用于创建Windows应用程序的发布包。它的核心功能是自动检测并复制应用程序运行所需的动态链接库(DLL)、插件、翻译文件等资源到指定目录。这样,即使在没有安装Qt环境的电脑上,应用程序也能正常运行,避免了因缺少依赖项而导致的错误。Windows部署工具旨在自动化创建可部署文件夹的过程,该文件夹包含从该文件夹运行应用程序所需的Qt相关依赖项(库、QML导入、插件和翻译)。(这一句很关键,说明了windeployqt的作用)原创 2025-04-07 14:10:46 · 752 阅读 · 0 评论 -
Qt导出Excel图表
QXlsx 是一个非官方的、独立的 Qt 库,用于读写 Excel 文件(.xlsx 格式)。这个库提供了一个方便的方式来创建新的 Excel 文档或编辑现有文档,而不依赖于 COM 或其他外部接口,使其适用于跨平台应用程序。QXlsx 的主要特性读取和写入 Excel 文件:支持从 .xlsx 文件中读取数据,并能够写入新数据或修改现有数据。支持单元格格式:可以设置字体、边框、颜色、对齐方式等多种单元格格式。多种数据类型:支持字符串、数字、日期和时间等多种类型的数据输入。原创 2024-11-28 15:57:27 · 807 阅读 · 0 评论 -
vs提示未指定的错误的问题
vs就是一个临时配置文件,删除了可以自动生成。然而,如果没正常关闭软件,出了问题,可是很让头疼,直接删除.vs文件就可以了。原创 2024-10-29 10:26:53 · 809 阅读 · 0 评论 -
window的0xc000007b错误
这说明基于viusal studio运行库开发的程序,都必须在visual studio库上运行。VC2015运行库,全称Visual C++ 2015运行库,是由微软公司发布的一套运行时库,用于支持用Visual C++ 2015开发的应用程序运行。这些运行库包含了运行用Visual C++开发的应用程序所必需的环境组件。vc++2015运行库软件功能:1、Visual C++ Redistributable Package 安装 Visual C++ 库的运行时组件。原创 2024-10-28 10:22:03 · 415 阅读 · 0 评论 -
Qt的互斥量用法
互斥锁,就是只有锁定与解锁,两种状态,可以说,是最简单的锁,也是最实用的锁。原创 2024-09-30 16:55:06 · 976 阅读 · 0 评论 -
Qt中英文支持
中英文对应,就是中英文一一对应,并不是我一开始想的自动翻译,这就好像键值对一样,就是这么的简单。相应资料链接:https://download.youkuaiyun.com/download/maokexu123/89658658。原创 2024-08-21 17:41:26 · 613 阅读 · 0 评论 -
InstallShield协议制作与去掉单位
许可协议要么没有,要么默认是英文的,我们一般需要把许可协议改成中文的。许可协议首先是rtf文件,写完内容,放到这里:beginabort;endif;szMsg = "";elseendif;szMsg = "";szMsg = "";if (nvSize!elseendif;endif;原创 2024-07-29 15:03:07 · 497 阅读 · 0 评论 -
Qt的64位程序与32位程序的通信
简单的说就是通过共享内存实现了64位程序与32位程序的通信,这样好处挺多。因为这样程序的独立性增强了,共享内存,真得很好用,特别是qt对共享内存的封装特别的好,直接带了锁的功能,lock,unlock非常的好用。其关键如图所示:关键就在于定死长度的数据类型,这样32位程序与64位程序都可以用,这也理解了qint32这种带着长度类型的好处了,一眼就可以看出其长度是多少,在跨进程时,就可以放心的使用,因为其长度是固定的,不同的处理器都可以正确的解析这种类型。原创 2024-07-04 11:36:30 · 1568 阅读 · 0 评论 -
QT的TCP服务端与多客户端通信
QT有自己的特色,大体流程各个语言都差不多,整体可以这样理解:客户端能找到服务端,然而,服务端一开始找不到客户端,如果想维护常连接,必须客户端发起,服务端对连接进行管理,从图中可知服务端需要管理这一个套接字池。原创 2024-06-25 15:29:35 · 1360 阅读 · 0 评论 -
Qt报表实现-QPainter+QPrinter
这里最关键就是根据位置进行画了,有些复杂,但可以精确控制位置,也是非常好的。其坐标在左上角,这与视图的坐标是一致的,其实,可以理解,其就是这么一个图:然后,就可以按照这种坐标,进行画自己想要的东西:表格、文字、图画等。项目下载地址:https://download.youkuaiyun.com/download/maokexu123/89478200。原创 2024-06-24 15:50:03 · 1097 阅读 · 0 评论 -
qt经典界面框架
其实就是一个简单的界面显示,是很常用的形式。说起来简单也是简单,但当初,刚开始做时,感觉非常的复杂,不知如何下手。现在感觉简单多了。这个框架利用了QT的现成的MainWindow与QDockWidget,这样就很轻松拥有了界面上的组件。然则,这离系统要加菜单之类的东西,边界的设置,还是有差距的。这就用到了,QT的界面组合。QT的界面可以任意的组合,就像搭建积木一样。这一个界面很简单,里面有很多可以扩充的地方,扩充好了,就是一个非常漂亮的系统,上面只是一个界面的架子,其它的东西,包括界面,可以任意原创 2024-06-21 10:59:20 · 1321 阅读 · 6 评论 -
opencv中文路径问题
其关键在于用了toLocal8Bit()的编码转化,这一个函数的解释如下:以QByteArray形式返回字符串的本地8位表示形式。如果字符串包含本地8位编码不支持的字符,则返回的字节数组是未定义的。原创 2024-06-18 13:53:39 · 780 阅读 · 0 评论 -
opencv图像的本质
OpenCV是一个跨平台的库,使用它我们可以开发实时的计算机视觉应用程序。它主要集中在图像处理,视频采集和分析,包括人脸检测和物体检测等功能。数字图像在计算机中是以矩阵形式存储的,矩阵中的每一个元素都描述一定的图像信息,如亮度、颜色等等。数字图像处理就是通过一系列操作从矩阵数据中提取更深层次信息的过程。原创 2024-02-22 10:33:43 · 766 阅读 · 0 评论 -
无法解析的外部符号ShellExecuteExW
SHELLEXECUTEINFO参数说明://结构大小,sizeof(SHELLEXECUTEINFO)//指定结构成员的有效性HWND hwnd;//父窗口句柄或出错时显示错误父窗口的句柄,可以为 NULL//指定该函数的执行动作//操作对象路径//执行参数,可以为 ULL//工作目录,可以为 NULLint nShow;//显示方式//如果设置了 SEE_MASK_NOCLOSEPROCESS ,并且调用成功则该值大于32,调用失败者被设置错误值。原创 2024-01-17 17:45:05 · 747 阅读 · 0 评论 -
Qt5插件开发入门+示例
最终成功的调用了插件,感觉非常的不错。其利用了C++虚函数的特性,实现了运行时绑定,非常的不错!!!用图说明一下虚函数:这样就实现了接口与具体实现的彻底分离。下面的关于虚函数的介绍:1.虚函数的简介由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数,所以被成为“虚”函数。用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。原创 2024-01-09 14:51:34 · 1479 阅读 · 0 评论 -
QT进度条代理的实现
这个效果实现的关键在于:QItemDelegate,该类提供了在视图中绘制项目数据和编辑项目模型中的数据的函数的默认实现。提供了在QAbstractItemDelegate中定义的paint()和sizeHint()虚拟函数的默认实现,以确保委托实现视图所期望的正确基本行为。您可以在子类中重新实现这些函数,以自定义项的外观。这一个函数的实现,这一个函数的目的就是控件状态,包括默认状态等状态,简单来说就是显示的样子。原创 2023-06-30 16:45:53 · 1065 阅读 · 0 评论 -
QT树的实现
其实这里就是这样一个类似的数据结构:int row;int rank;原创 2023-06-27 11:38:26 · 1037 阅读 · 0 评论 -
movetoThread应用的注意点
这个东西怎么说呢?movetoThread()函数,只是移动了非new的成员变量与子对象,也就是未移动非子对象的new变量,在QT中变量不能跨线程,所以跨线程的变量都会报错,有的报:这一个错误不需要加this,因为,this是主线程的this,去掉this即可解决问题。这一个错误,需要加this,因为this是目标线程的this,加了this,Timers也移到目标线程了,这样就在一个线程中了。其本质是一样的就是,变量跨线程(父与子跨线程也是不允许的,实质也是变量跨线程)原创 2023-06-15 13:52:33 · 681 阅读 · 2 评论 -
Qt推荐的多线程的理解
其理解的关键就是在于thread默认运行着exec(),时刻监听着事件队列的情况,如果队列里有事件,就取出来执行;有了这一个事件队列,可比原来直接在run()当中执行方便多了,这样也理解了moveToThread方法的含义,其含义就是把整个对象放到这一个线程里,这个线程通过exec()监听着事件队列,如果事件队列有事件,就取出来执行,非常的方便,当然也可以放一个QTimer控件在线程里,进行定时执行,也是可以的。原创 2023-06-13 17:06:25 · 1205 阅读 · 0 评论 -
QT的布局关键之一QFrame
QT的强大的地方,很多体现在界面上。做出强大的界面,也是程序员很有成就的事情。接着说,在QT界面强大的之一就是QFrame的应用,它就像一个箱子一样,可以固定放到一个位置,然后就可以,向箱子里放东西,很多情况,都是这样的,界面上放很多箱子,箱子里随意放自己想放的东西就可以了。官方上说的也很简洁:我却感觉这一句话里,有很多很多的话,也许只有用了才能体会到。QFrame就是一个框子,可以放到页面的任何位置,框子里可以放很多东西。如果没有这一个框子,东西,就会放到到处都是,就好像家里没了衣橱一样原创 2022-04-08 20:11:48 · 5119 阅读 · 0 评论 -
C++与QT的sprintf的用法
反正经常用sprintf这个函数,因为太好用了吧。通过这个,可以拼字符串,包括各种类型的变量,都可以组装到里面,拼字符串是程序最经常的一个操作了,可以说,很多程序就是组装字符串的过程,记得一个同学以前说过:程序的本质不就是处理数据吗?是啊,就是这点事。用法是一致的,如下:C 库函数 int sprintf(char *str, const char *format, ...) 发送格式化输出到 str 所指向的字符串这就是他们共同的地方,不同的就是QT通过面向对象封装了一下,如此而已。原创 2022-03-07 15:34:42 · 5762 阅读 · 0 评论 -
QT的信号关闭与触发
QT当中经常用到信号,信号大部分是需要触发的,但有时也不需要触发,需要临时关闭,QT控件本身就有这种能力,用这种能力,可以很好的控制控件的信号,让它得到很好的使用。下面,我就说今天在实际工作当中遇上一个需要临时关闭信号的情况:代码简化如下:Example1::Init(){ int currentIndex = 1; for (size_t i = 0; i < pCommu->size(); ++i) { log_debug("here"原创 2022-02-25 20:12:23 · 2790 阅读 · 0 评论 -
Qt消息的理解
官网这样说:当对象的内部状态以某种方式发生变化,对象的客户端或所有者可能会感兴趣时,对象就会发出信号。信号是公共访问函数,可以从任何地方发出,但我们建议只从定义信号及其子类的类发出信号。当发出信号时,连接到它的槽通常立即执行,就像普通的函数调用一样。当这种情况发生时,信号和槽机制完全独立于任何GUI事件循环。一旦所有槽都返回,emit语句之后的代码就会执行。当使用排队连接时,情况略有不同;在这种情况下,emit关键字后面的代码将立即继续执行,而插槽将稍后执行。原创 2023-05-17 14:25:10 · 519 阅读 · 0 评论 -
QString的解析与常用功能
QString存储字符串采用的是Unicode码,每一个字符是一个16位的QChar,而不是8位的char,所以QString处理中文字符没有问题,而且一个汉字算一个字符。count()、size()、length()都返回字符串的个数,这3个函数是相同的,但是要注意,字符串中如果有汉字,一个汉字算一个字符。trimmed()去掉字符串首尾的空格,simplified()不仅去掉首尾的空格,中间连续的空格也用一个空格替换。lastIndexOf()函数则是查的某个字符中最后出现的位置。原创 2023-05-08 11:50:23 · 1046 阅读 · 0 评论 -
Qt 的log输出无法显示文件名行号等信息
在QT项目中,用 qInstallMessageHandler 函数输出log时候,QMessageLogContext 中的文件名,行号等信息获取失败;解决方法:在.pro文件中,添加 DEFINES += QT_MESSAGELOGCONTEXT 即可;原创 2023-04-23 14:36:35 · 458 阅读 · 0 评论 -
非常量引用只能绑定到左值
先解释左值和右值的区别:从字面意思看,左右值就是在“=”两端的变量或表达式,但其实不是这样的。左值(Location Value):并不是left_value,指的是可以寻址。指的是如果一个表达式可以引用到某一个对象,并且这个对象是一块内存空间且可以被检查和存储,那么这个表达式就可以作为一个左值。右值(Read Value):也就是可读。指的是引用了一个存储在某个内存地址里的“数据”。原创 2023-04-22 22:30:00 · 677 阅读 · 0 评论 -
QT程序退出还占进程
程序运行时的样子:程序退出时的样子:其跑到了后台进程里面:程序退出了,但在任务管理器里查看,其从进程里面转移到后台进程了。这种问题,怎么办,代码里,应该释放的也都释放了,为什么会出这个问题呢?在后台的进程,还有时占些cpu,说明的确在运行,的确在做事情。这首先怀疑到了是否线程的问题呢?原创 2023-04-12 09:23:15 · 2985 阅读 · 1 评论 -
com10以上连接报错
首先是QT程序,串口用的QSerialPort,连接com17时报这个错,但连接com4,com5这种串口号,就不报错:非常奇怪,只要是com1…com9都是可以,但在设备管理器改成com10,com11这种两个数字的都会报错。还有这种问题后来查资料,发现是这种问题:当COM口的端口号高于9时,也就是说从COM10往后,serialPortName赋值就不能跟COM1~~COM9一样,C++中COM大于9时,COM前面需要加上\.\COM。如,原创 2023-04-11 17:31:28 · 1161 阅读 · 0 评论 -
C++断言让程序有了脾气
简单的说,出现了不能忍受的错误,我只能崩溃,没有别的选择,我是有脾气的由此,可知,人有脾气是对的,脾气是对人的种保护,程序也是一样的。原创 2022-08-26 19:05:54 · 937 阅读 · 2 评论 -
C++静态变量为什么定义在类外
C++ 的静态成员变量为什么一定要在类外定义函数如下,在C++中声明静态成员变量的时候,在类中只是进行了声明,并没有实际的申请出指针的内存,真正的内存是定义初始化的时候才会进行内存的申请为什么这样呢?因为static类型的变量都是随着类的,因此不能随着对象的创建而申请内存,所以需要单独的进行类外定义,在定义的时候C++编译器会申请内存给静态指针。如图所示:其是不属于对象的,所以不能随着对象创建,所以只能在类外进行定义。...原创 2022-08-25 18:36:34 · 921 阅读 · 0 评论 -
qt的表格里放控件
综合来说实现挺简单的,关键一步就是在父窗口上生成控件,在父窗口生成控件,体现到界面上,就是,控件成为了父窗口的一部分,然后,再放到指定位置就可以了。创建控件时,可以指定停靠在某个父窗口上面,这时控件将作为子窗口被束缚在其父窗口的内部,并伴随父窗口一起移动,隐藏,显示和关闭;否则,该控件将作为独立窗口显示在屏幕上,且游离于其它窗口之外。原创 2022-08-23 19:07:51 · 1143 阅读 · 0 评论 -
qt的子窗体调用父窗体的函数
在QT开发中,用遇到子窗体,调用父窗体函数的情况。一般都是父窗体调用子窗体,但反过的情况也是有的,可以见得编程什么情况都有如果交互引用,编译都过不了。通过在头文件当中,声明类,这里是这样声明的:class Dialog;这个类就是父窗体了。DialogSon1:这个类是子窗体父窗体的方法实现如下,现在就是想实现,子窗体如何调用父窗体的这一个函数: ##2.2、通过parentWidget()获取父窗体现在开始调用这一个方法,先获取父窗体,并调用父窗体的方法就可以了:原创 2022-08-22 17:47:33 · 3538 阅读 · 3 评论 -
Linux C 的多文件编译
过程是很简单,就是一个include cal.h头文件不就可以了吗?那程序是如果找到cal.c里面的max函数的实现呢?那是因为gcc会在当前路径找这些函数实现,这里就是在cal.o里面找到max的函数实现,然后,然后把声明的函数max与实现函数的max,链接起来,这就是链接阶段的任务。当然,不仅找当前路径下的,还会去找系统的默认路径/usr/lib/下面找这个,我以前也疑惑,其是怎么找到函数实现,其实,就是这样,一点一点查找的,然后再链接到声明,就这么简单。原创 2022-08-21 18:27:18 · 1163 阅读 · 0 评论 -
c语言指针的指针
指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。C 中指向指针的指针一个指向指针的指针变量必须如下声明,即在变量名前放置两个星号。例如,下面声明了一个指向 int 类型指针的指针:int **var;......原创 2022-08-12 18:50:48 · 3241 阅读 · 0 评论 -
C++的map用法
map是STL的一个关联容器,它提供一对一的hash。第一个可以称为关键字(key),每个关键字只能在map中出现一次;第二个可能称为该关键字的值(value);map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。Map主要用于资料一对一映射(one-to-one)的情況,map內部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。在map内部所有的数据都是有序的,后边我们会见识到有序的好处。比如一个中,每个学生的学号跟他的姓名就存在著一对一映射的关系。.........原创 2022-08-11 10:10:28 · 1958 阅读 · 0 评论 -
error:‘shared_ptr‘was not declared in this scope
1、You need to add the memory header at the beginning of your file.#include 2、if above solution does not work even after include of header, please ensure that to compiler you are passing argument --std=c++11原创 2022-08-04 10:37:16 · 1458 阅读 · 0 评论