QT编程
文章平均质量分 52
围绕着QT,记录工作、学习当中遇到的各种问题和解决方法。
程序员如山石
以前从事虚拟化的工作,现在从事嵌入式方面的工作。
展开
-
Qt中英文支持
中英文对应,就是中英文一一对应,并不是我一开始想的自动翻译,这就好像键值对一样,就是这么的简单。相应资料链接:https://download.csdn.net/download/maokexu123/89658658。原创 2024-08-21 17:41:26 · 275 阅读 · 0 评论 -
InstallShield协议制作与去掉单位
许可协议要么没有,要么默认是英文的,我们一般需要把许可协议改成中文的。许可协议首先是rtf文件,写完内容,放到这里:beginabort;endif;szMsg = "";elseendif;szMsg = "";szMsg = "";if (nvSize!elseendif;endif;原创 2024-07-29 15:03:07 · 308 阅读 · 0 评论 -
Qt的64位程序与32位程序的通信
简单的说就是通过共享内存实现了64位程序与32位程序的通信,这样好处挺多。因为这样程序的独立性增强了,共享内存,真得很好用,特别是qt对共享内存的封装特别的好,直接带了锁的功能,lock,unlock非常的好用。其关键如图所示:关键就在于定死长度的数据类型,这样32位程序与64位程序都可以用,这也理解了qint32这种带着长度类型的好处了,一眼就可以看出其长度是多少,在跨进程时,就可以放心的使用,因为其长度是固定的,不同的处理器都可以正确的解析这种类型。原创 2024-07-04 11:36:30 · 1185 阅读 · 0 评论 -
QT的TCP服务端与多客户端通信
QT有自己的特色,大体流程各个语言都差不多,整体可以这样理解:客户端能找到服务端,然而,服务端一开始找不到客户端,如果想维护常连接,必须客户端发起,服务端对连接进行管理,从图中可知服务端需要管理这一个套接字池。原创 2024-06-25 15:29:35 · 779 阅读 · 0 评论 -
Qt报表实现-QPainter+QPrinter
这里最关键就是根据位置进行画了,有些复杂,但可以精确控制位置,也是非常好的。其坐标在左上角,这与视图的坐标是一致的,其实,可以理解,其就是这么一个图:然后,就可以按照这种坐标,进行画自己想要的东西:表格、文字、图画等。项目下载地址:https://download.csdn.net/download/maokexu123/89478200。原创 2024-06-24 15:50:03 · 662 阅读 · 0 评论 -
qt经典界面框架
其实就是一个简单的界面显示,是很常用的形式。说起来简单也是简单,但当初,刚开始做时,感觉非常的复杂,不知如何下手。现在感觉简单多了。这个框架利用了QT的现成的MainWindow与QDockWidget,这样就很轻松拥有了界面上的组件。然则,这离系统要加菜单之类的东西,边界的设置,还是有差距的。这就用到了,QT的界面组合。QT的界面可以任意的组合,就像搭建积木一样。这一个界面很简单,里面有很多可以扩充的地方,扩充好了,就是一个非常漂亮的系统,上面只是一个界面的架子,其它的东西,包括界面,可以任意原创 2024-06-21 10:59:20 · 1015 阅读 · 6 评论 -
opencv中文路径问题
其关键在于用了toLocal8Bit()的编码转化,这一个函数的解释如下:以QByteArray形式返回字符串的本地8位表示形式。如果字符串包含本地8位编码不支持的字符,则返回的字节数组是未定义的。原创 2024-06-18 13:53:39 · 509 阅读 · 0 评论 -
opencv图像的本质
OpenCV是一个跨平台的库,使用它我们可以开发实时的计算机视觉应用程序。它主要集中在图像处理,视频采集和分析,包括人脸检测和物体检测等功能。数字图像在计算机中是以矩阵形式存储的,矩阵中的每一个元素都描述一定的图像信息,如亮度、颜色等等。数字图像处理就是通过一系列操作从矩阵数据中提取更深层次信息的过程。原创 2024-02-22 10:33:43 · 690 阅读 · 0 评论 -
无法解析的外部符号ShellExecuteExW
SHELLEXECUTEINFO参数说明://结构大小,sizeof(SHELLEXECUTEINFO)//指定结构成员的有效性HWND hwnd;//父窗口句柄或出错时显示错误父窗口的句柄,可以为 NULL//指定该函数的执行动作//操作对象路径//执行参数,可以为 ULL//工作目录,可以为 NULLint nShow;//显示方式//如果设置了 SEE_MASK_NOCLOSEPROCESS ,并且调用成功则该值大于32,调用失败者被设置错误值。原创 2024-01-17 17:45:05 · 537 阅读 · 0 评论 -
Qt5插件开发入门+示例
最终成功的调用了插件,感觉非常的不错。其利用了C++虚函数的特性,实现了运行时绑定,非常的不错!!!用图说明一下虚函数:这样就实现了接口与具体实现的彻底分离。下面的关于虚函数的介绍:1.虚函数的简介由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数,所以被成为“虚”函数。用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。原创 2024-01-09 14:51:34 · 1285 阅读 · 0 评论 -
QT进度条代理的实现
这个效果实现的关键在于:QItemDelegate,该类提供了在视图中绘制项目数据和编辑项目模型中的数据的函数的默认实现。提供了在QAbstractItemDelegate中定义的paint()和sizeHint()虚拟函数的默认实现,以确保委托实现视图所期望的正确基本行为。您可以在子类中重新实现这些函数,以自定义项的外观。这一个函数的实现,这一个函数的目的就是控件状态,包括默认状态等状态,简单来说就是显示的样子。原创 2023-06-30 16:45:53 · 939 阅读 · 0 评论 -
QT树的实现
其实这里就是这样一个类似的数据结构:int row;int rank;原创 2023-06-27 11:38:26 · 948 阅读 · 0 评论 -
movetoThread应用的注意点
这个东西怎么说呢?movetoThread()函数,只是移动了非new的成员变量与子对象,也就是未移动非子对象的new变量,在QT中变量不能跨线程,所以跨线程的变量都会报错,有的报:这一个错误不需要加this,因为,this是主线程的this,去掉this即可解决问题。这一个错误,需要加this,因为this是目标线程的this,加了this,Timers也移到目标线程了,这样就在一个线程中了。其本质是一样的就是,变量跨线程(父与子跨线程也是不允许的,实质也是变量跨线程)原创 2023-06-15 13:52:33 · 600 阅读 · 2 评论 -
Qt推荐的多线程的理解
其理解的关键就是在于thread默认运行着exec(),时刻监听着事件队列的情况,如果队列里有事件,就取出来执行;有了这一个事件队列,可比原来直接在run()当中执行方便多了,这样也理解了moveToThread方法的含义,其含义就是把整个对象放到这一个线程里,这个线程通过exec()监听着事件队列,如果事件队列有事件,就取出来执行,非常的方便,当然也可以放一个QTimer控件在线程里,进行定时执行,也是可以的。原创 2023-06-13 17:06:25 · 1158 阅读 · 0 评论 -
QT的布局关键之一QFrame
QT的强大的地方,很多体现在界面上。做出强大的界面,也是程序员很有成就的事情。接着说,在QT界面强大的之一就是QFrame的应用,它就像一个箱子一样,可以固定放到一个位置,然后就可以,向箱子里放东西,很多情况,都是这样的,界面上放很多箱子,箱子里随意放自己想放的东西就可以了。官方上说的也很简洁:我却感觉这一句话里,有很多很多的话,也许只有用了才能体会到。QFrame就是一个框子,可以放到页面的任何位置,框子里可以放很多东西。如果没有这一个框子,东西,就会放到到处都是,就好像家里没了衣橱一样原创 2022-04-08 20:11:48 · 4877 阅读 · 0 评论 -
C++与QT的sprintf的用法
反正经常用sprintf这个函数,因为太好用了吧。通过这个,可以拼字符串,包括各种类型的变量,都可以组装到里面,拼字符串是程序最经常的一个操作了,可以说,很多程序就是组装字符串的过程,记得一个同学以前说过:程序的本质不就是处理数据吗?是啊,就是这点事。用法是一致的,如下:C 库函数 int sprintf(char *str, const char *format, ...) 发送格式化输出到 str 所指向的字符串这就是他们共同的地方,不同的就是QT通过面向对象封装了一下,如此而已。原创 2022-03-07 15:34:42 · 5202 阅读 · 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 · 2639 阅读 · 0 评论 -
Qt消息的理解
官网这样说:当对象的内部状态以某种方式发生变化,对象的客户端或所有者可能会感兴趣时,对象就会发出信号。信号是公共访问函数,可以从任何地方发出,但我们建议只从定义信号及其子类的类发出信号。当发出信号时,连接到它的槽通常立即执行,就像普通的函数调用一样。当这种情况发生时,信号和槽机制完全独立于任何GUI事件循环。一旦所有槽都返回,emit语句之后的代码就会执行。当使用排队连接时,情况略有不同;在这种情况下,emit关键字后面的代码将立即继续执行,而插槽将稍后执行。原创 2023-05-17 14:25:10 · 474 阅读 · 0 评论 -
QString的解析与常用功能
QString存储字符串采用的是Unicode码,每一个字符是一个16位的QChar,而不是8位的char,所以QString处理中文字符没有问题,而且一个汉字算一个字符。count()、size()、length()都返回字符串的个数,这3个函数是相同的,但是要注意,字符串中如果有汉字,一个汉字算一个字符。trimmed()去掉字符串首尾的空格,simplified()不仅去掉首尾的空格,中间连续的空格也用一个空格替换。lastIndexOf()函数则是查的某个字符中最后出现的位置。原创 2023-05-08 11:50:23 · 949 阅读 · 0 评论 -
Qt 的log输出无法显示文件名行号等信息
在QT项目中,用 qInstallMessageHandler 函数输出log时候,QMessageLogContext 中的文件名,行号等信息获取失败;解决方法:在.pro文件中,添加 DEFINES += QT_MESSAGELOGCONTEXT 即可;原创 2023-04-23 14:36:35 · 322 阅读 · 0 评论 -
非常量引用只能绑定到左值
先解释左值和右值的区别:从字面意思看,左右值就是在“=”两端的变量或表达式,但其实不是这样的。左值(Location Value):并不是left_value,指的是可以寻址。指的是如果一个表达式可以引用到某一个对象,并且这个对象是一块内存空间且可以被检查和存储,那么这个表达式就可以作为一个左值。右值(Read Value):也就是可读。指的是引用了一个存储在某个内存地址里的“数据”。原创 2023-04-22 22:30:00 · 582 阅读 · 0 评论 -
QT程序退出还占进程
程序运行时的样子:程序退出时的样子:其跑到了后台进程里面:程序退出了,但在任务管理器里查看,其从进程里面转移到后台进程了。这种问题,怎么办,代码里,应该释放的也都释放了,为什么会出这个问题呢?在后台的进程,还有时占些cpu,说明的确在运行,的确在做事情。这首先怀疑到了是否线程的问题呢?原创 2023-04-12 09:23:15 · 2303 阅读 · 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 · 823 阅读 · 0 评论 -
C++断言让程序有了脾气
简单的说,出现了不能忍受的错误,我只能崩溃,没有别的选择,我是有脾气的由此,可知,人有脾气是对的,脾气是对人的种保护,程序也是一样的。原创 2022-08-26 19:05:54 · 886 阅读 · 2 评论 -
C++静态变量为什么定义在类外
C++ 的静态成员变量为什么一定要在类外定义函数如下,在C++中声明静态成员变量的时候,在类中只是进行了声明,并没有实际的申请出指针的内存,真正的内存是定义初始化的时候才会进行内存的申请为什么这样呢?因为static类型的变量都是随着类的,因此不能随着对象的创建而申请内存,所以需要单独的进行类外定义,在定义的时候C++编译器会申请内存给静态指针。如图所示:其是不属于对象的,所以不能随着对象创建,所以只能在类外进行定义。...原创 2022-08-25 18:36:34 · 852 阅读 · 0 评论 -
qt的表格里放控件
综合来说实现挺简单的,关键一步就是在父窗口上生成控件,在父窗口生成控件,体现到界面上,就是,控件成为了父窗口的一部分,然后,再放到指定位置就可以了。创建控件时,可以指定停靠在某个父窗口上面,这时控件将作为子窗口被束缚在其父窗口的内部,并伴随父窗口一起移动,隐藏,显示和关闭;否则,该控件将作为独立窗口显示在屏幕上,且游离于其它窗口之外。原创 2022-08-23 19:07:51 · 1045 阅读 · 0 评论 -
qt的子窗体调用父窗体的函数
在QT开发中,用遇到子窗体,调用父窗体函数的情况。一般都是父窗体调用子窗体,但反过的情况也是有的,可以见得编程什么情况都有如果交互引用,编译都过不了。通过在头文件当中,声明类,这里是这样声明的:class Dialog;这个类就是父窗体了。DialogSon1:这个类是子窗体父窗体的方法实现如下,现在就是想实现,子窗体如何调用父窗体的这一个函数: ##2.2、通过parentWidget()获取父窗体现在开始调用这一个方法,先获取父窗体,并调用父窗体的方法就可以了:原创 2022-08-22 17:47:33 · 3254 阅读 · 3 评论 -
Linux C 的多文件编译
过程是很简单,就是一个include cal.h头文件不就可以了吗?那程序是如果找到cal.c里面的max函数的实现呢?那是因为gcc会在当前路径找这些函数实现,这里就是在cal.o里面找到max的函数实现,然后,然后把声明的函数max与实现函数的max,链接起来,这就是链接阶段的任务。当然,不仅找当前路径下的,还会去找系统的默认路径/usr/lib/下面找这个,我以前也疑惑,其是怎么找到函数实现,其实,就是这样,一点一点查找的,然后再链接到声明,就这么简单。原创 2022-08-21 18:27:18 · 1101 阅读 · 0 评论 -
c语言指针的指针
指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。C 中指向指针的指针一个指向指针的指针变量必须如下声明,即在变量名前放置两个星号。例如,下面声明了一个指向 int 类型指针的指针:int **var;......原创 2022-08-12 18:50:48 · 3055 阅读 · 0 评论 -
C++的map用法
map是STL的一个关联容器,它提供一对一的hash。第一个可以称为关键字(key),每个关键字只能在map中出现一次;第二个可能称为该关键字的值(value);map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。Map主要用于资料一对一映射(one-to-one)的情況,map內部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。在map内部所有的数据都是有序的,后边我们会见识到有序的好处。比如一个中,每个学生的学号跟他的姓名就存在著一对一映射的关系。.........原创 2022-08-11 10:10:28 · 1886 阅读 · 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 · 1371 阅读 · 0 评论 -
QT的快捷键的使用与配置
1、alt +enter // 自动创建类定义的实现2、F1 // 查看帮助,文档3、F2 // 快速到变量声明4、Shift + F2 // 函数的声明和定义之间快速切换5、F4 // 在 cpp 和 h 文件切换6、Ctrl +M 创建书签, Ctrl + . 切换书签 Alt + M打开书签栏。7、Ctrl + Enter 在当前行的下方插入空白行,8、Ctrl +Shift + Enter 到上一行添加空白行9、Ctrl + ],Ctrl+[ 跳到程序段结尾 或者开头10、Ctrl原创 2022-07-14 18:05:38 · 5195 阅读 · 0 评论 -
C++当中的编码问题
不管什么语言,当然包括C语言,编码问题,都是经常遇到的,经常因为编码问题报错,感觉非常的烦人。今天,我就遇上了这个错误如下:error : string is not in UTF-8encoding error : output conversion failed due to conv error, bytes 0xFF 0xFF 0xFF 0x22I/O error : encoder error代码是这样的:原因就是:我弄了一个结构体://*存储平台连接状态PlatCon原创 2022-04-01 18:54:11 · 1330 阅读 · 0 评论 -
C++的引用类型的掌握
引用类型是C++新增加的一个类型,也是非常体现C++特点的一个类型,一直知道其是别名,但具体含义必须准确掌握,才能准确的应用,其注意点如下:1、定义:引用是已定义的变量的别名(另一个名称)2、用途:引用变量的主要用途是用作函数的形参3、使用注意事项:必须在声明引用时进行初始化(引用更接近const指针,必须在创建时进行初始化,一旦与某个变量关联起来,就将一直效忠于它)这三点记住,就可以说掌握了引用的用法,哪一点不理解到位,使用过程中都报错。比如第一点,定义,引用是已定义的变量的别名,其含原创 2022-03-07 18:39:57 · 694 阅读 · 0 评论 -
QProcess的正确用法
在进行编程过程中,经常用到在程序当中调用其它的程序,这就需要用到进程调用,在QT中就用到了QProcess的进行进程调用,其有QT自身的特点,用起来非常方便,与C++本身的接口不一样,其流程特点如下:特点1:需要waitForStarted,判断程序启动是成功,还是失败特点2:需要waitForFinished,判断程序是否结束这也是比较传统的用法,当然,你不愿意判断结束,就可以不判断了。一般使用时容易犯的错误,就是直接省略了特点1的处理过程,进行了特点2,正常的话,是没问题...原创 2022-03-02 18:42:03 · 2948 阅读 · 0 评论 -
error: conflicting declaration ‘typedef struct
这个错误也在c开发当中,经常遇上的一个错误:"error: conflicting declaration 'typedef struct"中文意思是:冲突的声明意思就是:两个类型重名了,冲突是现象,原因就是名字一样了知道原因,就好解决问题了,找到重名的两个类型,把其中一个改成其它名字就可以了。这个错误,算是非常好找原因的错误,一个非常简单的错误,比起内存溢出之类的错误,这个错误简单多了。...原创 2021-12-28 20:44:03 · 13558 阅读 · 0 评论 -
Linux下c库函数设置系统时间
设置时间,首先了解时间这一个结构体,在处理时间时,经常用到它:struct tm { int tm_sec; //当前秒 int tm_min; //当前分钟 int tm_hour; //当前小时 int tm_mday; //当前在本月中的天,如11月1日,则为1 int tm_mon; //当前月,范围是0~11 int tm_year; //当前年和1900的差值,如2006年则为36 int tm_wday; //当前在本星期中的天原创 2021-12-28 20:38:43 · 3730 阅读 · 0 评论 -
Linux下C程序调用库函数实现重启
在linux下实现系统的重启,函数很多,一般常用:system(“reboot”);这都是调用shell命令实现的,这样的话,依赖于/sbin/reboot这个外部程序,还有直接利用库函数实现的,利用库函数实现的更为直接,shell肯定也是封装了这些函数实现的。先上代码:#include <unistd.h>#include <sys/reboot.h>int main(){ sync(); // 同步磁盘数据,将缓存数据回写到硬盘,以防数据丢失[lu原创 2021-12-28 20:28:09 · 3128 阅读 · 0 评论 -
qt错误3-warning: deprecated conversion from string constant to ‘char*‘
这也是qt开发当中经常遇到的错误,错误代码如下:char *a=NULL;a = "this is a test";这样就会报上面错,这是因为:不可变的类型赋值给可变的类型,就会报这种警告,我就想这么弄:char *msg = "hello";*msg = 'j';printf( "%s/n", "hello" );编译器会通过编译,实际上会将msg指向的内容从"hello"转变为"jello", 正确的解决方法是将msg声明为一个指向不变字符串的指针:const char *.原创 2021-12-22 19:06:49 · 506 阅读 · 0 评论 -
qt错误2-error: forward declaration of ‘class xxx‘
这也是qt开发中,经常遇到的错误:字意就是:提前声明了变量,这个错误是在头文件当中提示的,其含义就是:这个类未定义与上面qt错误1的本质是一样的:可以声明一个类而不定义它 class Student;//declaration of the Student class 这个声明,有时候被称为前向声明(forward declaration),在程序中引入了类类型的Student.在声明之后,定义之前,类Student是一个不完全类型(incompete type),即已知Studen...原创 2021-12-22 18:41:17 · 5643 阅读 · 0 评论