
Qt
木千
这个作者很懒,什么都没留下…
展开
-
Qt不能在线程函数操作UI
Qt的官方文档虽然并没有明确说明,不能在子线程中操作UI,但是,因为Qt是事件循环机制,所有的UI事件都是在主线程中处理的,如果在子线程中直接操作UI,就会存在线程安全问题,严重时候会使程序挂掉。参数5:Q_ARG宏,用来向函数传递参数,宏的第1个参数是函数参数的类型,第2个参数是传递参数的变量名,如果函数有多个参数,可以继续往下使用Q_ARG宏来传递。参数4:Q_RETURN_ARG宏,用来接收函数的返回值,宏的第1个参数是返回值类型,第2个参数是接收返回值的变量名。参数2:调用的方法名。原创 2023-12-21 21:52:57 · 1738 阅读 · 0 评论 -
字符编码和Qt中文乱码相关问题这里都给理清楚了
本文可以帮你彻底理清Qt程序中的中文乱码问题,做到不但知其然并且还能知其所以然。做中文软件开发的朋友应该都遇到过中文乱码问题,遇到这种情况,很多人都是百度一下,学到一个方法,放到程序里一试,见到确实有效,然后就丢在那不管了。这样做关键的问题有两个:一是很容易出现,在这个情况下有效,但到了另一个情况就无效了,还要找其他的方法去处理;二是有些东西根本就不是处理字符编码问题的,但用了确实能解决乱码问题,就会造成乱用的现象原创 2022-04-20 22:04:13 · 1937 阅读 · 3 评论 -
Qt的TCP通讯
基本使用使用Qt的进行TCP通讯,主要用到两个类,QTcpServer和QTcpSocket。前者主要用于服务端的监听,相当于原始socket中由socket函数创建的监听socket;后者主要用于读写数据,相当于原始socket中由accept函数返回的连接socket。服务端的大致使用流程如下:创建QTcpServer对象,调用listen函数进行IP和端口号的监听,执行过该函数后,客...原创 2020-03-23 11:58:30 · 11715 阅读 · 1 评论 -
正确解决VS编译Qt遇到无法运行rc.exe问题
今天用vs新建一个qt工程,编译的时候发现无法运行“rc.exe”,习惯性的上网找解决办法,找到的都是把rc.exe复制来复制去的,这是绕开问题,不是解决问题。而且我之前的qt工程不用复制rc.exe也能正常编译,只有新建的不行,所以肯定有其他正确解决问题的方法,最简单的就是比较两个工程的配置,看有什么区别。打开工程属性,看下面的截图能正常编译的旧工程中的目标平台版本是8.1,而新建的工程默...原创 2020-03-19 11:59:23 · 13095 阅读 · 4 评论 -
深扒QProcess
临近年关,春节前的一周时间都没什么事,每天上班光明正大的摸鱼。但一周都没事做也不免有些无聊。为了打发无聊的时间,翻出我珍藏多年的移动硬盘,在硬盘的某个快被遗忘的角落,翻出了一个我多年以前刚开始学C语言时在网上淘到的一个双管道后门程序。这个后门程序当时我是看不懂的,随手丢在了角落吃灰,这么多年过去了,我觉得我应该能看得懂了,就翻出来研究一下。其大致原理是这样的:先在本地起一个监听socket,然后...原创 2020-01-20 12:24:50 · 12016 阅读 · 0 评论 -
Qt的拖放功能
对于源控件,需要重写鼠标按下事件和鼠标移动事件class TweenMouldListWidget : public QListWidget{ Q_OBJECTpublic: TweenMouldListWidget(QWidget *parent = Q_NULLPTR); ~TweenMouldListWidget();protected: virtual void mou...原创 2019-12-03 18:21:31 · 11456 阅读 · 0 评论 -
Qt槽函数的重入问题
在Qt的信号槽机制中,如果一个槽函数的执行时间很长,在槽函数还没有执行结束的时候,有新的信号产生,默认情况下,该次信号不会被丢弃,而是会等槽函数执行结束后再次调用槽函数但是在某些情况下,如果想将槽函数执行过程中所产生的新信号丢弃掉,有以下两种方法:blockSignals和disconnect假设有如下信号槽connect(m_play, &QShortcut::activated,...原创 2019-11-29 18:14:36 · 13125 阅读 · 0 评论 -
Qt的延时函数
阻塞延时使用QThread类的msleep、sleep、usleep函数优点:使用简单,都是静态函数,引入头文件后可以直接调用精确度高,可以精确到微秒缺点这几个函数的作用是强制当前线程休眠,非ui线程倒是无所谓,如果是ui线程,界面会卡死非阻塞延时利用Qt的事件循环结合while循环,方法如下QTime timer = QTime::currentTime().addMS...原创 2019-11-29 17:57:04 · 15363 阅读 · 0 评论 -
Qt的操作堆栈
用Qt做操作堆栈主要用到这么几个类QUndoCommand、QUndoStack、QUndoGroup和QUndoView,下面详细介绍QUndoCommand该类就是堆栈中的操作元,我们在用的时候需要创建该类的子类,重写该类的一些方法,并将操作的具体实现放到继承的子类中,通常需要重写redo、undo、mergeWith、id等方法redo该方法是操作的具体实现,也就是做和重做时所调用的...原创 2019-11-22 18:00:09 · 13906 阅读 · 0 评论 -
Qt程序打包
如果直接把编译好的Qt程序拿到未安装Qt运行库的机器上无法直接运行,通常需要将Qt的依赖运行库一起进行打包发布手动复制动态库文件进行打包很麻烦,好在Qt提供了一个自动打包工具,可以将所需要的文件自动复制到程序所在目录首先打开Qt的控制台,然后切换到发布程序的目录,执行命令windeployqt 应用程序名命令执行完毕后就会将所有的依赖文件都拷贝到该目录下,直接将该目录打包发布即可...原创 2019-11-11 10:18:57 · 11396 阅读 · 0 评论 -
深扒Qt信号槽(Windows平台)
在上一篇简单实现Qt的信号槽中,我们简单模拟了Qt的信号槽,从信号发出到槽函数调用我们已经基本了解了,但一些Qt自带的信号是怎么发射出来的呢?今天我们就来深扒一下。为了方便起见,我们先找一张Qt继承关系图上图为网上找的,原图连接在这里,侵删然后,我们随便建个Qt工程,添加一个pushButton,并绑定clicked信号,将断点下在我们的槽函数上,调试程序,点击pushButton,程序会...原创 2019-08-08 12:39:10 · 12194 阅读 · 0 评论 -
简单实现Qt的信号槽
#include <stdio.h>#include <string.h>#include <vector>#include <map>#include <iostream># define slots# define signals# define emitclass Object;// 首先,我们定义一个元对象...原创 2019-08-05 17:05:48 · 11380 阅读 · 0 评论 -
简单模拟Qt的子类内存释放
用过Qt的朋友都知道,继承自QObject的子类,只要delete父对象可以自动delete父对象的所有子对象,今天我们来用几行代码模拟一下#include <QList>class A{public: A(A *parent = nullptr) { if (parent) parent->addChild(this); } virtual ~A()...原创 2019-08-01 13:41:08 · 11497 阅读 · 0 评论 -
使用匿名函数绑定重载信号槽
使用lambda定义匿名函数,在匿名函数中调用槽函数,这种写法在类定义的时候可以不用Q_OBJECT宏,不会生成Qt那些乱七八糟的东西,同时使Qt的信号槽的适用范围更广QObject::connect(ui.pushButton_Open, static_cast<void(QPushButton::*)(bool b)>(&QPushButton::clicked), ...原创 2020-06-06 19:47:46 · 442 阅读 · 0 评论 -
Qt遍历目录下的文件
QDir dir("dir");if (!dir.exists()) return a.exec();QStringList filters("*.abd");dir.setFilter(QDir::Files | QDir::NoSymLinks);dir.setNameFilters(filters);int dir_count = dir.count();if (dir_co...原创 2019-07-10 10:27:28 · 11494 阅读 · 0 评论