Qt
文章平均质量分 75
五木大大
十年以上编程经验
喜欢和各路朋友一起探讨技术
喜欢交朋友
喜欢思想的碰撞
喜欢分享
展开
-
Qt对象树,自动管理Qt堆上的内存,防止内存泄露,类似智能指针,但是更加方便
对象树其实是一颗多叉树,当Qt的对象是QObject对象或其子对象的时候,就可以在new的时候,通过指定父节点的方式,将创建的对象放到父节点的孩子节点列表中去,当父节点被释放的时候,就会连父节点下的孩子列表也一起释放掉,从而起到自动管理堆内存的作用。这种方式特别适合用来管理GUI的框架对象。除了能自动管理堆内存,还可以对有界面的对象,进行界面显示层次的控制。原创 2024-01-17 17:21:39 · 744 阅读 · 0 评论 -
Qt乱码问题解决方案、Qt按钮等控件文字显示不全的处理
Qt乱码问题解决方案、Qt按钮等控件文字显示不全的处理;内容乱码解决方案:如果是输入在当前工程显示,可以使用QString类解决;接下来我们继续来研究一下,控件不能完全显示出来文字内容的问题,如按钮中的文字不能全部显示,解决方案有2个:1、将控件放到布局中来显示,然后整体再使用布局进行自适应大小即可。2、如果不想使用布局来处理的话,可以在主函数加上一行代码解决问题:原创 2024-01-03 22:33:31 · 2602 阅读 · 0 评论 -
Qt 多线程发信号要注意的点
众所周知,Qt的信号槽非常重要,当需要发信号的时候,信号接收方得要接收到信号之后,才能触发槽函数,那么一起来讨论一下多线程情况下,哪些地方需要注意的呢?原创 2023-12-19 17:53:58 · 813 阅读 · 0 评论 -
C++ Qt TCP协议,处理粘包、拆包问题,加上数据头来处理
tcp协议里面,除了心跳检测是关于长连接操作的处理,这个在前一篇已经提到过了,这一篇将会对tcp本身的一个问题,进行处理:那就是做网络通信大概率会遇到的问题,粘包、拆包问题,碰到这类问题对于新手来说都是比较棘手的,需要好好处理一下。原创 2023-11-20 15:57:20 · 2708 阅读 · 3 评论 -
C++ Qt TCP的心跳检测机制,断线重连技术,应用层代码重新实现
TCP本身是有一个保活状态的 keep-alive机制,默认是关闭的,需要单独启动就可以;默认保活时间是2小时,不过这个机制是在协议层,也就是传输层生效的,如果应用层出问题了,就不能及时发现问题;如果想要实现断线重连的操作,这个就不好实现了。 另一种方式,可以在应用层自定义模拟这个心跳检测机制,使用线程或者定时器来定时发心跳包即可实现保活功能,并且能做到断线重连的操作。原创 2023-11-19 13:16:29 · 4026 阅读 · 0 评论 -
Qt TCP相关的一些整理:服务端常见操作 socket 通信 network
在Qt的服务端上,不单单会用到服务端本身的API,对连接上来的客户端,也需要进行数据交互,也要用到一些收发包相关的API操作;原创 2023-11-18 15:41:39 · 1022 阅读 · 0 评论 -
Qt TCP相关的一些整理:客户端常见操作 socket 通信 network
发包函数:write,有3种写法,第三种其实相当于第一种,不过使用了内联来处理,使得调用的时候,更加方便。由于Qt中的收包是异步非阻塞的,还得需要配合收包信号来处理一下才可以,需要自定义槽来配合信号处理收包。有两种写法,但是前2个参数都是目标计算机的IP、Port,其他值可以不屑,都是有缺省值的。char buffer[] = "码蚁软件欢迎您";最后,就可以在任何想要发包的地方,使用对象来调用write函数发包即可;一般在读取数据之前,都会简单判断一下是否有数据可读,用到函数。原创 2023-11-17 16:00:18 · 544 阅读 · 0 评论 -
C++ Qt 创建多线程,控制6组ABB输出到UI界面上,使用moveToThread方式,配合mutex,condition_variable实现,含优化代码
本篇内容主要涉及到的相关技术有:多线程,多线程创建的方式 moveToThread,互斥锁 mutex,条件变量 condition_variable,唯一锁 unique_lock 等。在Qt程序中有2条线程,可分别输出A、B字符,每条线程只能启动一次,想办法控制输出顺序为:ABBABBABBABBABBABB共六组,输出到Ui界面上,用标签来显示即可原创 2023-11-16 16:36:22 · 518 阅读 · 1 评论 -
Qt 多线程实现6组ABC的有序输出到标签中,使用重写run和moveToThread实现多线程,使用mutex和condition_variant实现同步来控制顺序
有3条线程,可以分别输出A、B、C,有序的控制输出顺序为ABCABCABCABCABCABC共6组,放到UI的标签中显示,每条线程只能启动一次;原创 2023-11-15 21:43:57 · 189 阅读 · 1 评论 -
Qt创建多线程的2种方式:重写run函数,使用moveToThread【应该早点知道的】
就是自定义一个类,继承QObject类,并在类中添加自定义槽来实现线程功能,可以添加多个槽都可以,这个方式比重写run函数的方式更加灵活一些,因为run函数只有一个,而这个方式可以给多个槽来实现功能,使用的时候,需要实例化2个对象,分别是自定义类对象,还有QThread对象,使用自定义类对象.moveToThread(QThread对象指针),并且使用connect函数来关联QThread对象的started启动信号和自定义的功能槽,最后使用QThread对象调用start函数启动线程。原创 2023-11-14 17:12:26 · 834 阅读 · 1 评论 -
Qt使用信号与槽实现多窗口切换,3个窗口的切换,ABC窗口切换
有A,B,C三个界面,每个界面上分别有一个按钮,点击按钮就会切换到另一个界面上,同时当前界面隐藏,具体效果顺序:A-->B-->C-->A;前一篇实现的是2个窗口的切换,可能很多人不一定能真正的理解信号槽在多窗口切换的操作细节,往往一不小心就会进入死胡同,导致两个界面的头文件相互包含,编译通不过;要求A界面为主界面先显示,那就得把其他界面对象及功能槽都放到A界面类里面来,其他的2个界面B、C只需要负责发信号来触发功能即可。有3个槽:A-->B 的槽;A类: 有3个对象:this,B对象,C对象。原创 2023-11-12 22:19:48 · 1050 阅读 · 1 评论 -
Qt 两个窗口切换,AB窗口切换源码演示
要求效果,默认只显示一个界面,就是主界面A先显示,点击A上的按钮之后,显示B界面,A界面隐藏,再点击B界面的按钮,显示A界面,B界面隐藏。那么B对象只需要有一个信号,当点击按钮的时候,发射信号,通知A上的槽执行功能即可。有主界面A,子界面B,分别有一个按钮,当点击按钮的时候,就会切换到另一个界面。A上还得有2个对象:this,还得有一个B的指针对象。一个槽负责: A-->B。另一个槽负责: B-->A。顺序如下: A--->B-->A。A的源文件:a.cpp。原创 2023-11-12 21:45:09 · 804 阅读 · 3 评论 -
Qt信号与槽的连接:1对多,多对1是如何执行的?
众所周知,Qt的信号与槽连接的函数是connect函数,而Qt又分为不同的版本;变化比较大的是Qt4和Qt5这2个版本,到了Qt5之后,加了不少东西;特别是connect函数在关联信号槽的时候,执行顺序总是受到很多使用者的关心。信号与槽之间,可以进行1对1的关联,也可以1对多的关联,还可以进行多对1的关联;原创 2023-11-11 17:40:09 · 205 阅读 · 1 评论 -
Qt信号槽connect函数的4种写法
connect(信号发送者,QOverload::of(&类名::信号名),信号接收者,QOverload::of(&类名::槽名),连接方式);connect(信号发送者,QOverload::of(&类名::信号名),信号接收者,[=](形参列表...){...},连接方式);connect(信号发送者,SIGNAL(信号(参数类型...)),信号接收者,SLOT(槽(参数类型...)),连接方式);特别说明一下:[=](形参列表...){...}原创 2023-11-10 11:22:15 · 288 阅读 · 1 评论 -
Qt信号槽connect的第五个参数,5种连接方式
是一个异步非阻塞的效果,其实单线程,多线程都可以使用,当发射信号之后,不需要等待槽执行,就可以立马往下执行发射信号之后的代码。单线程时使用,会同步阻塞执行,发信号之后,当槽执行完了,才能往下执行发射信号之后的代码。Qt信号槽连接的函数是connect函数,共有5个参数,第五个参数是表示连接方式;当使用自动连接的时候,单线程时,会自动切换到直接连接,多线程时会切换到队列连接;默认情况下,第五个参数是不用写的,使用的缺省值,是自动连接;主要是用来防止相同的信号槽重复连接的。会根据线程来自动切换。原创 2023-11-09 20:56:06 · 1038 阅读 · 0 评论 -
Qt自定义信号槽代码实现
需要使用关键字 signals,在类中添加如下效果signals:// 信号只声明,不实现需要使用 权限+关键字slots,在类中添加如下效果// 槽需要声明+实现// 在应用程序输出中查看输出结果只需要在按钮的槽中发射信号即可 使用关键字 emit 信号()// 发射信号使用的是connect函数,使用宏的写法// 信号槽关联。原创 2023-11-09 19:55:49 · 400 阅读 · 1 评论 -
Qt信号槽
connect(信号发送者,信号,信号接收者,槽,连接方式);第五个参数代表连接方式,有五种连接方式。connect函数有4种写法。使用的观察者模式来实现的。原创 2023-11-09 19:25:06 · 83 阅读 · 1 评论