
Qt经验总结
文章平均质量分 90
宁静致远2021
天道酬勤,持之以恒。
发上等愿,结中等缘,享下等福;
择高处立,寻平处住,向宽处行。
展开
-
深入理解Qt状态机的应用
有限状态机(finite-state machine)又称有限状态自动机(finite-state automaton),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型。这个概念在计算机科学、数学、语言学、工程以及其他研究领域都有广泛的应用。有限状态机非常适合用于描述那些通过一系列的输入来转移状态的系统。原创 2025-04-17 12:02:12 · 892 阅读 · 0 评论 -
Qt触摸屏隐藏鼠标指针
1.如果只希望在某个 widget 中不显示鼠标指针,那么在该 widget 的构造函数中调用。还可以用setCursor函数来设置鼠标指针的不同样式。3.可以在任一控件或者页面下显示或者隐藏鼠标指针。QT鼠标图标显示与隐藏。原创 2025-04-12 20:50:09 · 460 阅读 · 0 评论 -
openssl交叉编译
no-async: 交叉编译工具链没有提供GNU C的ucontext库。no-asm: 在交叉编译过程中不使用汇编代码代码加速编译过程;–cross-compile-prefix=: 交叉编译工具。shared: 生成动态连接库。–prefix=: 安装路径。执行下面的命令配置工程。原创 2025-04-06 10:03:35 · 521 阅读 · 0 评论 -
qt 操作多个sqlite文件
以下是一个简单的示例,展示如何在Qt中操作多个SQLite数据库文件。在Qt中使用多线程操作多个SQLite数据库文件时,需要注意SQLite的线程安全性以及Qt的多线程机制。SQLite默认支持多线程操作,但需要确保每个线程使用独立的数据库连接,以避免竞争条件。如果文件不存在,SQLite会自动创建它。使用QSqlDatabase::addDatabase创建独立的数据库连接,并通过moveToThread将工作者对象移动到独立的线程中。程序会创建多个线程,每个线程操作一个独立的SQLite数据库文件。原创 2025-03-08 20:21:15 · 1371 阅读 · 0 评论 -
QT-自定义参数设计框架软件
常用本地数据参数通常使用的是xml等文本的格式,进行本地的数据参数的存储。这种参数的保存方式有个致命的一点,就是可以存在参数的丢失。特别是在软件异常退出的情况下发生。针对此等情况,我们现在使用的是sqllite的本地存储方式进行设计,并且尽量将参数的格式通用化。原创 2025-03-04 21:17:31 · 849 阅读 · 0 评论 -
Qt互斥锁(QMutex)的使用、QMutexLocker的使用
QMutexLocker提供的简化互斥锁锁定和解锁的机制在很多时候时蛮方便的,在使用互斥锁的地方使用QMutexLocker会减去许多安全隐患;不过在多线程循环输出ABC的时候好像就不适合该方法。所以使用类似的类还得按情况而定。原创 2025-02-27 22:12:20 · 2091 阅读 · 0 评论 -
Qt延时处理的四种方法
这种方法不会阻塞当前线程,尤其适合Qt的单线程带UI程序,或者UI线程,因为线程阻塞时,很明显的现象就是UI卡死。它可以使得程序在while等待期间,去处理一下本线程的事件循环,处理事件循环最多100ms必须返回本语句,如果提前处理完毕,则立即返回这条语句。1、 多线程程序使用QThread::sleep()或者QThread::msleep()或QThread::usleep()或QThread::wait()进行延时处理。4、 创建子事件循环,在子事件循环中,父事件循环仍然是可以执行的。原创 2025-02-26 20:35:28 · 876 阅读 · 0 评论 -
win10上设置开机自动登录
Win + R,然后在弹出的输入框中输入regedit,回车运行,打开注册表。原创 2025-02-04 14:26:28 · 2096 阅读 · 0 评论 -
TortoiseGit间接处理linux目录下的仓库,用到window映射linux目录方案
这次尝试了3种映射linux目录到window的方案,都可以完成映射,基本的增删改查文件都没问题。但是只有WinFsp这个工具完美运行TortoiseGit,搞定收工。原创 2025-02-02 22:17:47 · 581 阅读 · 0 评论 -
Ubuntu下的Doxygen+VScode实现C/C++接口文档自动生成
Doxygen 是一个由 C++ 编写的、开源的、跨平台的文档生成系统。最初主要用于生成 C++ 库的 API 文档,但目前又添加了对 C、C#、Java、Python、Fortran、PHP 等语言的支持。其从源代码中提取注释,并生成多种输出格式,如HTML、PDF、LaTeX、RTF等,以帮助开发者创建易于阅读和理解的代码文档。Doxygen 简化了另行编写文档带来的重复性劳动,将代码和文档的工作合二为一。经过 10 年的迭代,Doxygen 成为了 C/C++ 项目首选的文档生成工具。原创 2025-01-31 18:14:31 · 998 阅读 · 0 评论 -
使用Doxygen实现代码自文档化
Doxygen是一个程序的文档产生工具,可以将程序中的注释转换成说明文档,后者API参考手册要遵守一定的注释规范,才能被Doxygen识别和转化在每个代码项中都可以有两类描述:brief描述 和 detailed描述;两种任选其一若需要通过Doxygen生成漂亮的文档,一般有如下几个地方需要使用Doxygen支持的风格进行注释头文件(.h 和 .hpp):主要用于声明版权,描述本文件实现的功能,以及文件版本信息等。原创 2025-01-31 11:34:12 · 1032 阅读 · 0 评论 -
Qt u盘自动升级软件
【代码】Qt u盘自动升级软件。原创 2025-01-30 08:55:33 · 765 阅读 · 0 评论 -
C++深拷贝和浅拷贝的区别
在 C++ 中,浅拷贝和深拷贝是处理对象复制时非常关键的概念,尤其是当对象内部有指针成员指向动态分配的内存时。对于指针成员,浅拷贝只复制指针的值(即内存地址),而不复制指针所指向的数据。这意味着原对象和拷贝对象的指针成员将指向同一块内存地址。选择浅拷贝还是深拷贝取决于具体情况,但在涉及到动态内存管理的场景下,深拷贝通常是必要的,以确保数据的独立性和程序的稳定性。这样,原对象和拷贝对象的指针成员就分别指向不同的内存地址,互不干扰。当一个对象被浅拷贝时,所有的成员变量都会直接复制其值,包括指针类型的成员变量。原创 2024-12-27 17:55:45 · 775 阅读 · 0 评论 -
细谈 C++ 返回传值的三种方式:按值返回、按常量引用返回以及按引用返回
C++ 的代码很难看懂,也许就在这些方面,一方面入参的四种方式,一方面出值的三种方式。相互组合,就会让人觉得晦涩难懂。其实好好深入到里面弄清楚其里面的含义,也就比较好理解了。这篇和上一篇写传参四种方式的博客写的非常认真,也希望能够对 C++ 初学者能有一些帮助。原创 2024-12-26 19:42:49 · 1139 阅读 · 0 评论 -
Qt 通用pro配置
如果指定 TEMPLATE为 lib模板,且未指定 CONFIG为静态库或者动态库,则默认生成动态库。提供一个通用的Qt pro工程配置。原创 2024-11-16 16:21:04 · 488 阅读 · 0 评论 -
Qt生成随机数详细指南(更现代化的QRandomGenerator类)
Qt提供了强大的随机数生成功能,主要通过QRandomGenerator和QRandomGenerator64类来实现。这些类不仅提供了生成整数和浮点数随机数的方法,还支持生成指定范围内的随机数。虽然旧的qrand()函数仍然可以使用,但高版本已经弃用,不再推荐。原创 2024-11-11 14:09:36 · 2094 阅读 · 0 评论 -
QJson-趟过的各种坑(先坑后用法)
rapidjson是腾讯的开源json解析框架,用c++实现。由于全部代码仅用header file实现,所以很容易集成到项目中。rapidjson的性能也非常出色。原创 2024-11-09 17:29:33 · 651 阅读 · 0 评论 -
Ubuntu中以root身份运行Qt创建的项目
使用Qt开发项目时遇到了一个问题,项目要调用串口时会需要root权限,而当我们使用桌面启动Qt creator使用的是用户身份,在debug或run项目时会出现权限不够的状况。可以在终端直接找到项目的bin文件以sudo权限运行,但是太过繁琐,不能每次都这样去调试。原创 2024-11-09 16:00:33 · 854 阅读 · 0 评论 -
【Qt问题】解决 Cannot retrieve debugging output
本文介绍了在Qt开发过程中遇到的’Cannot retrieve debugging output’问题及其解决方法。该问题可能由于同时运行了两个Qt软件导致,解决方案包括关闭其中一个Qt实例或确保项目在单个Qt环境中打开。这时需要打开一个选项:工具->选项->构建和运行->default for “Run in terminal”:由disabled改为enabled。原创 2024-11-07 17:02:59 · 913 阅读 · 0 评论 -
Qt QQueue 安全的多线程队列、阻塞队列
public://唤醒等待队列中的一个线程(来自wait)T take()private:这个 BlockingQueue类使用QMutex和QWaitCondition来保证线程安全,并实现了put、take、isEmpty和size等方法。其中,put方法用于往队列中插入元素,take方法用于从队列中取出元素,isEmpty方法用于判断队列是否为空,size方法用于获取队列中元素的数量。原创 2024-11-06 16:31:18 · 1021 阅读 · 0 评论 -
QtRO(Qt Remote Objects)分布式对象远程通信
Qt Remote Objects(QRO)是Qt提供的一种用于实现远程对象通信的机制。QtRO支持两种类型的通信:RPC(远程过程调用)和LPC(本地进程通信)。RPC(远程过程调用)包括以下几种类型:基于HTTP协议的RPC:例如Dubbo、Thrift等。基于二进制协议的RPC:例如GRPC、Hetty等。基于TCP协议的RPC:例如RMI、Remoting等。LPC包括基于共享内存的通信和基于消息传递的通信。总的来说,QtRO类似于平时的socket通信、串口通信、信号槽通信。原创 2024-11-05 19:40:55 · 778 阅读 · 0 评论 -
QT5串口多线程--派生类加moveToThread
之前讲过继承QThread,在虚函数run()中实现线程里的工作。这是qt4.6之前的方法,目前官方推荐的方法,是继承QObject类,再用方法moveToThread来将QObject派生类移动到新线程中去,这样QObject派生类定义的信号和槽的事件响应行为,都会发生在新的线程中。这个方法非常简单。下面还是以串口通讯作为例子,这次不用窗口,用控制台的方式。原创 2024-11-05 15:15:43 · 975 阅读 · 0 评论 -
Qt 彻底搞懂 SUBDIRS 的作用
本文主要介绍 qmake 的SUBDIRS变量在多项目工程中的应用。当Qt项目规模比较小的时候,我们用一个工程就可以将所有源码文件组织起来,而不影响编译效率。但是随着项目规模的增加,只用一个工程组织所有的文件就不合适了,这时可以考虑将项目按照功能拆分成多个子工程,而SUBDIRS就是用来将多个子工程组织在一起的qmake变量。每个Qt工程文件中都有一个TEMPLATE变量,Qt通过该变量的值决定如何构建工程。TEMPLATE常用的类型有三种,见下表。原创 2024-11-04 12:02:17 · 964 阅读 · 0 评论 -
SDK设计心得之接口设计
嗯,感觉良好,然后有一天,有一个应用只接入第二个平台而不接入第一个平台,我们第一次懵逼了,但是当时偷懒了,没有根本解决这个问题,而是选择虽然不接入第一个平台,也去第一个平台配置这个字段~~~这就已经很傻了,还不赶紧改,第二波就来了,第一个平台忽然调整了那个配置字段,弃用了,换了新的字段来标示,同时值也变化了(他们做了兼容,可以同时支持新旧字段),但是第二个平台就瞬间跪了,只能二选一,用老的值,新版本有问题,用新的值,老版本有问题,瞬间煞笔了~~好吧,在举个实际的例子,发现所有的经验都是血泪史,要哭了啊。原创 2024-11-04 11:52:46 · 938 阅读 · 0 评论 -
Qt中的动态链接库编程(Q_DECL_IMPORT、Q_DECL_EXPORT)
生成Test项目,输出Test.exe。在IAnimal接口中,我们定义了三个纯虚函数Eat()、Run()和 Sleep(),表示吃、跑和睡眠的动作,这是抽象的,因为不同的动物有不同的吃相和睡眠姿态,而世间的动物何止千千万——无所谓,让这些具体动物的不同 表现交给IAnimal插件的编写者发挥吧——这就是接口的魅力,加上插件的思想,整个应用程序就变成开放的,可扩展的了!COM是一个很成功的例子,只要符合COM的规范,我们就能编写出很好的DLL来,然而COM是微软私生的,要想跨平台,我们还得另找它路。原创 2024-11-04 11:45:48 · 1199 阅读 · 0 评论 -
C++编程法则 静态成员函数和非静态成员函数之间的相互调用
其生命期和类对象是异步的,(而且静态语意说明即使没有类实体的存在,其静态数据成员的实体也是存的)这个时候对象的生命期还没有开始,如果你要到类中去初始化类静态数据成员,让静态数据成员的初始化依赖于类的实体,,那怎么满足前述静态语意呢?但是在有些情况下只能使用静态成员函数,比如类内绑定自身成员函数作为回调函数,这种情况在开启多线程时很常见,如果不想将回调定义为全局那只能定义为类静态了,为了避免过度破坏封装类中应当尽量不要让类静态成原函数调用类成员。能在类中初始化的成员只有一种,那就是静态常量成员。原创 2024-10-29 08:26:12 · 1442 阅读 · 0 评论 -
QT获取本机所有IP地址以及修改本机IP(注意区分Windows和Linux环境)
它提供了获取本地系统中所有网络接口的信息的能力,并允许访问与这些接口相关的属性,比如IP地址、硬件地址、接口名称等。上面代码中Qt::CaseSensitivity 为枚举类型, 可取值Qt::CaseSensitive 和 Qt::CaseInsensitive, 表示匹配的灵敏度,例如,查看设备上所有网络接口的状态、检测网络连接问题、获取接口相关信息等。每个 QNetworkInterface 对象包含接口的属性,如硬件地址、接口名称、标志(如是否为环回、是否可用、是否为无线等)。原创 2024-10-21 19:34:13 · 1294 阅读 · 0 评论 -
QT串口读取Serial->readAll()踩过的坑
因为串口设置的是8位数据位,因此拿到的数据是32位,但是博主想要的是“00 10 00 00 00 00 01 00 28 00 0A 01 01 01 01 00 \r\n”。主要是串口每次只能打印32个字节的数据,如果多了就会把数据放到缓冲区,这导致要二次打印,使json格式不连续,就构不成json格式,如下图。上位机的写入lcd_Number的数据,因为单片机是分时发送数据,当发送power的数据时,电流、电压的json解析失败,那存放电流,电压的数据肯定为 0。这样处理后拿到的数据是:如图。原创 2024-09-07 09:59:26 · 4246 阅读 · 0 评论 -
Linux:Ubuntu18.04下开机自启动QT图形化界面
如果这里启动失败了需要回头更改rc.local文件看看是不是有语法错误或者执行的脚本有没有问题。如果在里面运行了脚本记得给脚本也添加可执行权限(在脚本所在文件夹下打开终端)困扰了一天的时间,终于解决,好了,废话不多说,直接上干货。电脑重启后就会自动执行,跳出QT图形运行界面 ,成功!如果查看状态和我一样的话,就说明程序启动成功了。如果启动一切无误且状态正常的话使能开机自启动。原创 2024-07-06 08:51:09 · 1817 阅读 · 0 评论 -
为RK3568或RK3288开发板创建交叉编译环境{采用amd64的ubuntu系统配置交叉编译arm64开发环境}(保姆级包括安装QT)超详细记录版
开发环境采用的是amd64 linux的系统,所以.run可以运行,我们在QT官网下载即可,版本自己选择即可,最好与后面要编译的qt对应起来。(9)这个hello.c建议放在/home/你的用户名/下面的文件夹内。(8)创建一个简单的c程序,用arm64编译器编译一下放到板子上运行。(1)将两个交叉编译器文件放在Downloads下面。(5)添加交叉编译器环境,路径在:/opt/都显示版本号说明没有问题。原创 2024-07-02 16:54:37 · 3460 阅读 · 0 评论 -
深入了解Qt 控件:Display Widgets部件(1) 以及 QT自定义控件(电池)
做一个电池控件,需要一个拖动条和一个进度条。不多说,直接上代码.h文件Q_OBJECTpublic:~Widget();private:.cpp文件//将拖动条设置为横向//设置拖动条范围//设置样式//拖动条每次值改变都会执行if(m_batteryBar->value()原创 2024-06-29 10:40:03 · 601 阅读 · 0 评论 -
Qt QQueue 详解:从底层原理到高级用法
在现代软件开发中,数据结构和算法扮演着至关重要的角色。它们为程序员提供了处理各种不同场景下数据的有效方法。QQueue(队列)是一种常见且实用的数据结构,它在许多应用中都发挥着关键作用。本文将简要介绍QQueue的重要性和简介。队列(Queue)是一种遵循先进先出(FIFO,First In First Out)原则的线性数据结构。在这种结构中,元素的添加(入队)和移除(出队)操作分别在队列的尾部和头部进行。这种特性使得队列在处理一些需要按顺序执行任务的场景中表现出优越性。原创 2024-06-09 22:31:01 · 1130 阅读 · 0 评论 -
QT中为程序加入超级管理员权限
QT的一些文件操作,注册表的操作等,有些操作会无效,主要是因为没有对C盘的相关权限。通过为程序加入超级管理员权限可以解决此问题。第一行是为程序添加图标,第二行是增加超级管理员权限。原创 2024-06-08 08:35:14 · 1858 阅读 · 0 评论 -
QT语言国际化 动态修改
2、对于需要翻译的文本,需要使用QObject::tr(“1111”).或QApplication::translate(“Widget”, “\346\227\213”, 0)包含,这要Qt的语言家功能才会将需要翻译的文本找到保存到ts文件中。5、生成的qm文件是在项目文件家中,而不是exe文件所在文件夹。4、工程的菜单: 工具 -> 外部 -> 语言专家 ->更新翻译(lupdate) 生成ts文件。6、工程的菜单: 工具 -> 外部 -> 语言专家 ->发布翻译(Release) 生成qm文件。原创 2024-06-03 09:32:00 · 946 阅读 · 0 评论 -
超详细基于Qt平台实现C/C++调用Matlab函数全流程
基于Qt平台实现C/C++调用Matlab函数有三种方式:(1)将Matlab函数封装成.dll文件,再在Qt平台上调用.dll文件实现;(2)将Matlab函数导出成.exe可执行程序,再在Qt平台上调用.exe可执行程序;(3)直接在Qt平台上调用Matlab Engin引擎,这种方法需要计算机上安装有Matlab软件。本文是通过第一种方式,将MATLAB代码转成C/C++代码和相关动态链接库进行实现的,其他两种方式具体可以参考:Qt调用MATLAB引擎混合编程。原创 2024-06-03 08:58:52 · 3091 阅读 · 3 评论 -
【Qt底层之内存管理机制】Qt 对象 父子关系、运行时机制与高效编程技巧
也就是说,在析构父对象–w时,会自动调用子对象btn的析构函数。当父对象析构的时候,这个子对象列表中的所有对象都会被析构,当析构子对象的时候,会自动从父对象的子对象列表中删除。按照这种形式排列就会形成一个对象树的结构,最上层是父对象,下面是子对象,在再下面是孙子对象,以此类推。值得注意的是,如果在构造时设置父对象为 NULL,那么当前实例不会有父对象存在,Qt 也不会自动析构该实例,除非实例超出作用域导致析构函数被调用,或者用户在恰当时机使用 delete 操作符或者使用 deleteLater 方法。原创 2024-05-30 21:15:30 · 1025 阅读 · 0 评论 -
Qt加载一个启动界面
用Qt编写界面,有时候看到一些软件启动前回进行各种算法和内容的加载,一般来说有加载文件和加载各种库以及启动其他的文件。在Qt里面我们用QSplashScreen类就可以实现上面的操作,当然启动时最好进行多线程的操作。不过如果是一个简单的例子我们就不用进行那么复杂的操作。原创 2024-05-08 16:16:01 · 1455 阅读 · 0 评论 -
QString设置小数点精度位数
因为Qt又默认只保存前6位,所以数据就是123.457。所以对精度要求高的话,就不要直接1234567/10000.用除法。在Qt中,我们可以使用QString::number()函数将float类型转换为QString类型以便在界面上显示。该函数默认显示6位小数,但我们也可以通过设置第二个参数来控制小数点位数。QString使用toDoouble转化double类型,其实精度没有丢失,只是我们使用qDebug打印时出了问题。在上面的代码中,参数’f’表示将数值格式化为浮点数,2表示保留2位小数。原创 2023-12-31 17:25:42 · 2588 阅读 · 0 评论 -
Qt图形视图框架:QGraphicsItem详解
我们在使用QGraphicsView框架的时候,经常需要自定义QGraphicsItem,并且需要实现Item的平移、改变大小和旋转的效果。接下来介绍他们的一种实现方式。原创 2023-11-15 09:34:57 · 1151 阅读 · 0 评论 -
Qt界面设计时使各控件依据窗口缩放进行自适应填充的方法——使用布局、Spacer等控件
关于 Qt 布局管理,有专门的帮助文档页面Layout Management。本章的主要内容就是介绍布局管理的知识,Qt 设计师里面不仅有布局器的控件可以拖动使用,还可以在窗体里面选择控件,然后点击设计师上面的工具按钮自动添加布局器。本节首先大致介绍一下 Qt 设计师里面关于布局器的操作界面。Qt 的窗口主要内容包括: 布局的样式 , 基于UI界面设置布局 , 基于API设置布局。Qt 窗口布局是指将多个子窗口按照某种排列方式将其全部展示到对应的父窗口中的一种处理方式。原创 2023-11-11 17:00:23 · 11047 阅读 · 0 评论