- 博客(31)
- 收藏
- 关注
原创 Qt Linguist实现界面和程序的动态翻译
在 Qt Creator 顶部菜单栏选择 “工具”→“外部”→“Qt 语言家”→“发布翻译 (lrelease)”。打开 Qt Creator,在顶部菜单栏选择 “工具”→“外部”→“Qt 语言家”→“更新翻译 (lupdate)”文件(XML 格式的翻译源文件) 编译而来。文件是 XML 格式的 “翻译草稿”,所有需要翻译的文本必须用。文件仅包含 “待翻译的原文”,需用 Qt 自带的。文件,并触发界面文本更新,实现动态翻译。文件是 二进制格式 的翻译文件,由。是文本格式,程序无法直接加载,需用。
2025-09-17 16:48:29
596
原创 lambda表达式
lambda 表达式是 C++11 引入的匿名函数特性,允许在代码中定义临时的、内联的函数对象,无需像普通函数那样单独声明和定义。它特别适合作为回调函数、算法参数或简化代码逻辑,在 Qt 等框架中常用于信号与槽的连接。
2025-09-15 17:52:09
249
原创 QString字符串连接、截取、替换
1、QString也重载的+和+=运算符。 2、QString的append()函数则提供了类似的操作。1、mid()函数接受两个参数,第一个是起始位置,第二个是取串的长度。如果省略第二个参数,则会从起始位置截取到末尾。2、函数left()和rigt()类似,都接受一个int类型的参数n,都是对字符串进行截取。不同之处在于,left()函数从左侧截取n个字符,而right()从右侧开始截取。四、可以检测字符串是不是以某个特定的串开始或结尾startsWith()/endsWith()五、字符
2025-09-15 12:02:57
551
原创 QEventLoop局部事件循环
:它内部就创建了一个局部事件循环,导致用户必须关闭对话框(让局部循环退出),才能操作主窗口(主循环继续)。会冻结线程) —— 因为进入一个 “等待 - 处理事件” 的循环,局部事件循环会持续处理队列中的事件。(区别于主事件循环)。局部事件循环可以在代码的任意位置启动(通过。后,代码会 "暂停" 在这一行,但线程并未被阻塞(如。),并在其中处理事件,直到调用。Qt 应用程序的运行依赖于。的特殊之处在于:它允许创建。
2025-09-12 18:04:04
309
原创 跨线程安全调用对象方法
:invokeMethod:是QMetaObject的静态成员函数,用于动态调用对象的方法,支持跨线程调用,是Qt线程安全通信的重要工具。"processNextRequest":第二个参数,字符串形式的方法名,指定要调用的具体方法(需是目标对象的公有成员函数)。QMetaObject:Qt元对象系统的核心类,提供动态调用对象方法、反射等底层能力,是Qt信号槽机制、跨线程通信的基础。this:第一个参数,指定要调用方法的目标对象,这里表示当前类的实例。
2025-09-12 10:37:59
175
原创 Qt 容器类+for循环
Qt容器类在多线程环境下,如果仅用于只读操作是线程安全的,但对容器的修改(如插入、删除、移动元素等)需要在适当的锁保护下进行。:使用完容器后,确保及时清理或删除不再使用的容器及其中的元素,尤其是在容器中有自定义对象时,避免内存泄漏。:与 QList 类似,但更适合在列表中间插入和删除元素,使用迭代器而非索引进行访问。:最常用的容器类,以数组的形式存储元素,支持快速的索引访问和在首尾插入元素。:与 QMap 类似,但使用哈希表实现,提供更快的查找速度。Qt 的容器类主要分为两大类:顺序容器和关联容器。
2025-09-04 17:23:38
886
原创 互斥锁QMutex/QMutexLocker
是对unlock()的封装,核心优势是自动管理锁的生命周期,解决了手动操作可能导致的锁泄漏和死锁问题。在实际开发中,应优先使用,仅在需要精细控制锁时机的特殊场景下,才考虑手动调用lock()和unlock()。
2025-08-25 11:51:51
265
原创 &的不同用法
参数类型是否需要原因输入参数(只读)可选(建议加const&提高效率)只需传递值,加const&可避免字符串拷贝,不加也能工作但效率低。输出参数(需修改并传出)必须加必须通过引用传递才能让外部获取到修改结果,否则修改只作用于内部副本。filePath是输入参数(只读),所以即使不加也能正确读取;而errorMsg是输出参数(需要传出结果),不加就无法将错误信息传递到外部,导致打印空白。
2025-08-05 14:34:46
846
原创 static成员变量
成员变量必须在类的外部进行定义和初始化,因为它不属于任何一个对象,所以不能在构造函数里初始化。通常的做法是在类的实现文件(成员变量属于类本身,而不是类的某个具体对象。也就是说,无论创建多少个该类的对象,成员变量属于类,因此可以通过类名直接访问,也可以通过类的对象访问。成员变量只有一份实例,所有对象共享这同一个变量。此声明仅仅是告诉编译器该类存在这样一个。成员变量,但并没有为其分配内存空间。B.内存分配与初始化。文件)中进行定义和初始化。
2025-08-05 14:03:44
223
原创 鼠标按下/移动/释放事件的两种处理方式
在主函数中,将事件过滤器installEventFilter安装到 QWidget 对象上,这样事件过滤器才能捕获该对象的事件。
2025-02-26 10:27:48
900
原创 QT样式表
1.基本使用方式1.1 为单个控件设置QSS1.2为整个应用程序设置 QSS2.选择器的使用2.1类型选择器(类型选择器用于选择指定类型的所有控件)
2025-02-25 16:32:52
180
1
原创 &、|=、>> 和 <<常见运算符
/ 设置 LED1 和 LED3 后的状态。qDebug()<< "第 " << bitPosition << " 位已打开";qDebug()<< "第 " << bitPosition << " 位未打开";// 清除 LED1 后的状态。// 选择第 2 位。LED1 = 0x01, // 第 0 位。LED2 = 0x02, // 第 1 位。LED3 = 0x04, // 第 2 位。LED4 = 0x08 // 第 3 位。// 设置 LED1 和 LED3。// 清除 LED1。
2025-02-18 17:14:27
252
原创 理解struct结构体、union联合体、enum枚举、typedef和define
通过使用struct关键字,你可以定义一个结构体类型,并在该类型中声明多个成员变量。通过使用typedef关键字,你可以定义一个新的数据类型名称,并在代码中使用该名称代替原有的数据类型。通过使用define关键字,你可以定义一个宏,并在代码中使用它来简化重复的代码或表示常量值。通过使用union关键字,你可以定义一个联合体类型,并在该类型中声明多个成员变量。通过使用enum关键字,你可以定义一个枚举类型,并在该类型中声明多个成员变量。枚举类型中的枚举值的标识符是唯一的,不能与其他宏定义标识符重名。
2025-02-11 11:07:18
363
原创 Qt程序获取执行路径等各种路径方法
那么qAPP->applicationFilePath();输出 C:/Qt/test/test.exe。那么qAPP->applicationDirPath();输出 C:/Qt/test。比如一个程序在C:/Qt/test/test.exe。
2025-02-08 11:46:36
751
原创 push_back和append区别
都是用于向容器末尾添加元素的函数,但它们之间有一些细微的区别。:可以添加多个字符、字符串、字符数组或迭代器范围内的字符。,在连续添加大量元素时都会带来性能损失。1.QVector中的append和push_back。:可以添加一个元素或另一个QVector的所有元素。,尤其是在需要添加多个元素或与其他容器交互时。函数为容器预留足够的空间来提高性能。2.C++中的string类型。则更适合添加单个元素的场景。在使用过程中,通常推荐使用。:只能添加一个元素。:只能添加单个字符。
2025-01-14 19:21:44
654
原创 QByteArray遍历
要遍历QByteArray,可以使用迭代器或者索引来访问其中的每个字节。无论使用哪种方法,QByteArray中的每个字节都是char类型的。
2024-12-19 14:35:32
254
原创 QT整数型转十六进制(大小写)
一般32位二进制整可以转化成8位的16进制。QByteArry转QString类型。QString类型的16进制数转换。
2024-12-02 17:16:17
701
原创 线程的同步
上面的代码真实的揭露了QMutex的无力,因为只要有mutex.lock(),必然要有mutex.unlock(),否则临界区里的资源将再不能被访问;注意,QWaitCondition::wait() 函数使用一个mutex作为它的参数,这样做的意义是:mutex刚开始是lock的,然后当这个线程因为placeNotFull.wait(&mutex);很明显我们想要一个线程(比如线程1)在访问变量number的时候,除非该线程(比如线程1)允许,否则其他线程(比如线程2)不能访问number;
2024-09-27 10:19:13
597
原创 setWindowFlags设置窗口属性
/去掉最大化按钮 但是按钮只是变暗了,并没有消失。//标题栏为空,最大化最小化以及关闭窗口都没有。(如果想去掉某个属性就直接加~就可以了)//该窗口置顶与其他的窗口。
2024-08-15 15:20:23
307
原创 调色板QPalette类-设置背景
上面方式无论设置背景色还是背景图片QPalette::Background与this->backgroundRole()是等价的!前言:窗口背景无非两种,及背景颜色、背景图片。Qt中窗口背景如何设置?2、实现paintEvent,使用QPainter来绘制背景。先调用setAutoFillBackground(true)QWidget::setPalette设置为新修改的面板。调用QWidget::palette()获取当前面板。1、QPalette设置背景。3、使用QSS来设置背景。
2024-08-15 14:56:51
580
原创 qRegisterMetaType类型的使用
2、注册方法:在当前类的顶部包含:#include <QMetaType>,构造函数中加入代码:qRegisterMetaType<QModbusDevice::State>("QModbusDevice::State");1、注册位置:在第一次使用此类链接跨线程的signal/slot之前,一般在当前类的构造函数中进行注册;不跨线程的话,使用自定义的类型使用signal/slot来传递,但如果是跨线程的使用,则没有这么简单。实际运行中也会发现,该信号槽没有起作用。
2024-08-01 17:23:16
426
原创 QT5添加新组件-临时存储库的值
3.依次进入/online/qtsdkrepository/windows_x86/root/qt/ 在最后一层界面复制当前浏览器地址并将其链接放置临时存储库的方框中。原文链接:https://blog.csdn.net/shanxuezhe/article/details/102776655。1.http://download.qt.io/static/mirrorlist/ 进入镜像网站;2.该网站显示了各国的qt镜像站点,以China-中科大的站为例子,点击HTTP会进入一个网络文件夹;
2024-01-29 16:30:58
896
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人