- 博客(82)
- 收藏
- 关注
原创 qtcpSocket详解
QTcpSocket 提供完整的 TCP 客户端功能使用信号槽机制处理异步事件注意数据编码和格式,特别是跨平台时正确处理粘包/拆包问题实现适当的错误处理和超时机制在多线程环境中小心使用,确保线程安全及时释放资源,避免内存泄漏。
2026-02-08 11:55:56
822
原创 qt中qthread详解
推荐使用 moveToThread 模式,而不是继承 QThreadGUI 操作必须在主线程中进行使用信号槽进行线程间通信,这是 Qt 最安全的方式注意对象的生命周期,使用 deleteLater 安全删除合理使用线程同步原语,避免竞争条件考虑使用线程池处理大量短期任务。
2026-02-08 11:51:12
835
原创 qml的控件无法打开现象
在 Qt Quick 开发中,Popup组件的焦点管理需要特别注意初始化阶段的竞争情况。通过遵循“打开后再聚焦”的统一原则,可以保证弹窗在各种场景下稳定工作,提升用户体验与代码可靠性。建议在项目中推广这一实践,避免类似问题的再次出现。
2026-02-07 12:17:37
309
原创 qml控件之ToolButton
完全自定义样式qrmltext: "自定义"// 隐藏默认背景// 自定义背景id: bgradius: 4// 边框// 背景色// 内容布局Row {spacing: 6// 图标Text {text: "⭐" // 使用Unicode字符作为图标// 文本Text {// 点击效果// 点击波纹效果width: 0height: 0from: 0简洁高效:专为工具操作设计,占用空间小灵活多样:支持图标、文本、检查状态等多种模式。
2026-02-06 09:36:30
397
原创 qml控件之Rectangle
简单易用:基本矩形、圆角、边框等设置非常简单功能丰富:支持渐变、阴影、旋转、缩放等高级功能掌握Rectangle的使用是QML界面开发的基础,几乎所有的UI组件都会用到Rectangle作为背景或容器。性能良好:渲染效率高,适合大量使用组合性强:可以与其他元素配合创建复杂效果。
2026-02-06 09:35:45
384
原创 qml控件之background
background属性是QML中强大的样式定制工具,通过合理使用可以:创建独特的UI风格实现复杂的交互效果优化应用性能提高代码复用性覆盖默认样式:设置background会完全替换控件的默认背景创建可复用的背景组件qml。
2026-02-06 09:34:31
757
原创 qml常用控件盘点
ListElement { name: "妙蛙种子";type: "草系" }ListElement { name: "皮卡丘";type: "电系" }这些控件构成了Qt Quick应用的基础,通过组合和自定义可以创建丰富的用户界面。Label { text: "请输入信息" }:文本显示元素(与Label类似但更基础):用于显示大量数据,支持模型-委托架构。:支持各种状态(正常、悬停、按下):基础可视元素,所有可视元素的基类。:通常用于多页面应用,支持导航栈。text: "发光文字"
2026-02-06 07:34:52
934
原创 qml的布局策略
Qt Quick的布局系统提供了从简单到复杂的全方位解决方案。锚点系统适合建立精确的静态或半静态相对关系,基础布局管理器适合简单的顺序排列,而智能布局管理器则能处理动态变化和复杂约束的场景。在实际开发中,根据界面需求灵活组合这些技术,可以创建出既美观又响应迅速的用户界面。记住,最好的布局策略往往是混合使用多种技术,每种技术都发挥其最擅长的部分。
2026-02-05 22:44:39
944
原创 qml的对象树机制
您观察到的"不会崩溃"是特定情况下的假象,可能是:编译器优化掩盖了问题Qt 的内部保护机制暂时避免了崩溃对象树的状态恰好避开了双重删除测试不够充分,没有触发病态情况但从软件工程角度,这绝对是应该避免的坏实践。就像闯红灯不一定每次都会被撞,但长期如此必然危险。Qt 文档强调这一点,是为了帮助开发者建立正确的内存管理习惯,避免难以调试的随机崩溃问题。
2026-02-05 22:39:22
832
原创 QML 中 Item、Window、Popup、Rectangle使用手册
height: 40// 显示框使用Rectangleradius: 4Text {text: selectedOption || "请选择"// 下拉图标...// 下拉菜单使用PopupPopup {radius: 4ListView {model: ["选项1", "选项2", "选项3"]clip: trueheight: 30Text {// 点击显示下拉组件主要用途可视性交互性层级何时使用。
2026-02-03 20:25:18
736
原创 qml程序运行逻辑
我们在书写qml程序的时候经常需要使用到qml的cpp的对象注册,以此来在qml中使用cpp的对象,下面来详细了解一下qml程序的运行逻辑,尤其是qml对象的注册下面我们进行详细的拆解创建了qt gui程序的核心管理对象,用来初始化qml系统,包括资源和界面,同时接收运行程序的时候传递进来的参数。需要注意的是这个代码要放到程序main函数的第一位,并且只能有一个这个对象,必须在主线程创建无法在跨线程信号槽中使用无法在QML中访问无法在QVariant中存储Qt的元对象系统无法识别该类型。
2026-01-24 21:39:35
588
原创 qml练习:实现游戏相机(3)
相机是游戏设计中很重要的一个环节,他把地图的视角单独的抽离了出来,实现了地图坐标的统一,方便后续地图的显示和人物的绘制。
2025-12-31 16:09:48
281
原创 qml练习:绘制rgp游戏地图(1)
接下来我打算使用qml进行一个简单的rpg游戏编写,以此来练习qml1要做一个rpg游戏首先要知道一个网格系统的概念,游戏中使用网格系统来达到图块资源的重复利用,更重要的是把地图分为一个个的小方块能够更好的处理我们的地图,对于程序后续编写的便利性很重要。我们这里采用tiled来进行地图的绘制,程序中使用手动解析的方式进行图块信息的解析,使用qml进行画面渲染和每一帧时间间隙的控制首先我们选择tiled绘制一个基本的土块地图。
2025-12-30 20:01:10
399
原创 qt的事件传播机制
事件传播方向:子类向父类传递,期间可以拦截 event->accept()默认情况下都会拦截,所有有时候会产生一些控件无法接收到信号的情况,比如。这个时候就产生了一个问题,一个控件需要监控另一个控件的事件。这个时候我们就需要使用事件过滤器,禁用拦截某些事件。或者传递给父对象 event->ignore()
2025-12-29 13:32:41
144
原创 qml的对象实例化
一个简单的qml文件就是一个声明,而实例化是在声明文件之外qml使用,一般基本的自定义类型下都是声明,自定义的类型就是实例化。我们需要注意的是,当我们的实例化的时候需要使用他的父类,使用的是声明,不需要实例化。qml中实例化一个对象就是相当于在widgets中new了一个控件。但如果在内部使用其他的类,就需要实例化。同时对应的也有声明这个状态。
2025-12-29 13:03:29
89
原创 qml时间显示控件实现
每次获取时间都要调用系统的函数,如果实时更新的话对于cpu消耗很大,反而如果用户每次获取时间的精度不是很高,可以减少消耗,这个相对与new开销很小。思路:实现实时显示当前时间可以使用qt自带的Qt.formatTime(new Date(), "hh:mm:ss"),以及。这里面new了两次的时间date,并且每次更新界面,也就是1s后也会触发new,本身。1.时间是一个固定值,他是时间轴上的一个点,所以根据语义应该是一个固定值。new之后获取的就是当前时间的静态照。中的Date对象进行时间的显示。
2025-12-28 15:51:02
204
原创 qml的基本语法讲解
作用:可以把程序中使用的变量进行一个捆绑,当一个变量发生变化的时候,其他的变量也会发生变化,如果其他的变量绑定到了一些ui控件或者信号槽中使用的时候就会更新ui控件,或者触发信号槽。其次导入版本模块提供了可以选择的版本号,与普通的include不同的是,有了版本号就可以导入新旧两个版本的库,对于我们来说更好的明确了当前程序模块版本号,避免误用不同的版本库。负责导入对应的功能模块,qt把一些功能类似的模块放到了一起,导入的时候直接导入所需要的模块类型,减少了手动添加头文件的问题。信号处理器的命名规则是。
2025-12-27 17:27:15
786
原创 使用vscode创建qt的qml项目
调试这一块是很重要的一点,创建项目完成之后我们可以看到一个cmake构建的项目,这时候我们可以使用vscode官方(微软)提供的一个插件vscode tools,这个插件很智能的帮我们省去了配置调试的时间,大多数情况下可以直接调试。1当产生程序崩溃的时候,vscode不会自动跳到崩溃点,需要我们自己去寻找,在调试信息里面会有对应的信息。创建好项目,我们需要熟悉一下vscode的在编写代码的时候的一些工具的使用方法。2qdebug不会输出到控制台,但在调试的时候会输出到调试输出窗口。搜索qt:create。
2025-12-27 12:30:15
508
原创 qml实现文本的滑动边框
想要实现一个带滑动边框的文本有很多的方法,比如采用TextEdit加上Flickable或者ScrollView,但经过笔者的测试,上面两种都很难有一个满意的效果。最后采用了TextArea这个控件加上ScrollView,TextArea继承了TextEdit,有很多textedit不具备的功能,很适合用来做多行的文本编译器。
2025-12-27 10:36:34
131
原创 extern关键词讲解和对代码冗余的解决思路
这里我们先介绍一个编译模块的概念,每一个cpp文件就代表一个编译模块,一般情况下不同的编译模块之间的代码是不互通的,此时extern就告诉编译器,当前声明的变量在其他的模块中。解决代码的冗余有很多的方法,包括使用继承,模板类,extern,全局变量,static,友元函数,这里我最常使用的是比较简单的辅助类的方法。文件的读取是一件很耗费时间的,同时如果一个线程读一个写,这个时候就会一个线程读取的和一个现在已经存在的文件内容不一样,出现数据错误的问题。一个辅助类的设计能很大程度上减少程序的冗余。
2025-10-03 16:57:23
402
原创 c++乱码问题探究
比如使用我们的控制台的时候,使用vscode程序自带的输出框的时候,这些都是和系统的编码一致的,这个时候就需要我们去修改系统工具的编码,但这可能会到导致一些不可预料的问题,和正常电脑的环境出现差别,最好的方法是直接在程序中调整程序输出的数据为gbk编码。有些文本写入的库并不需要给出具体的编码格式,比如c++的标准库,默认是和系统相同的编码集,这个时候我们明确的制定编码格式,包括在读取的时候。c++编程中乱码的原因主要是数据存储的格式和解析的格式不匹配导致的。这就导致在编程的时候往往会出现乱码的情况。
2025-09-29 18:09:16
688
原创 qt5下载
因为笔者要使用qt5运行某一个程序,在大版本不变的情况下,qt5最高的版本可以最大限度的容纳qt5所有的版本,本来想下载5.15版本,但寻找几番5.15版本在在线下载并没有找到。另外的一种思路是使用国内的镜像网站,但从长期的角度来考虑,并非所有的资源都能够找到镜像,同时一些资料的查询也是国内所没有的。一般来说只需要msvc和mingw编译之后的库就可以,其他额外的模块在使用的时候再添加,qt的编辑器版本都是通用的。但qt官方的作为外网,下载速度还是比较慢的,需要使用一定的魔法。4qt5和qt6兼容的问题。
2025-09-29 15:34:57
372
原创 qt项目使用visual stdio的创建流程
将 Qt 开发工具集成到 Microsoft Visual Studio 2022 中,使开发人员能够使用他们熟悉的 Windows 环境,而不必担心Qt 相关的构建步骤或工具。下载步骤:扩展 --> 管理扩展 --> 浏览 --> 搜索“Qt” -->安装Qt Visual Studio Tools。
2025-09-28 15:15:59
887
原创 使用setGraphicsEffect重新设置阴影导致程序崩溃的问题
后面尝试了每次设置都创建新的阴影对象,没有报错,猜测函数内部删除了指针。查询了官方文档,印证了猜想,解决方法:创建局部变量。
2025-04-24 18:24:56
262
原创 ai常用提示词
setRenderHints(替换成你的单词)、翻译成中文什么意思,让我更好记忆他的hints(不理解的地方)不理解。一.辅助函数接口理解。
2025-04-21 10:39:53
159
原创 qt中的正则表达式
1.在文本中把dog替换成cat,但可能会把dog1替换成cat1,如果原本不想替换dog1,就会出现问题。2 搜索:在文本中快速找到符合某一特征的内容(比如提取所有的电话号码)3如果需要找到在不同的系统中寻找·换行符,可以查找/r/n,或者/n。3如果此时想找一些普通的文本,只需要简单的find,效率可能更快。3 替换:将符合格式的文本替换成其他内容(比如批量需改日期格式)2文本中想获取某种以.txt为结尾的多有文本,普通的不能使用。1 匹配:检查某一个文本是否符合某种格式(比如邮箱)
2025-04-14 20:17:16
461
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅