C++
文章平均质量分 81
C++相关介绍
牛马不是牛
是牛还是马,这是一个问题。。。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
qmldir 文件详解:自动化与模块化最佳实践
qmldir 文件自动化与模块化最佳实践摘要 qmldir 文件是 QML 模块系统的核心配置文件,本文系统介绍了其创建管理策略、模块化架构设计和企业级实践方案。主要内容包括: 自动化管理:对比手动/自动/混合三种创建方式,提供 Python 生成脚本和 Git 钩子示例,实现自动化更新 模块化架构:详细解析单模块与多级模块结构,展示企业级模块划分方案和版本控制策略 高级语法:完整说明 qmldir 语法规范,包含模块声明、依赖管理、单例模式等关键元素 工程实践:提出自动化工作流、多环境管理、安全校验等企业原创 2026-01-21 16:53:19 · 424 阅读 · 0 评论 -
QQmlEngine 深度解析
QQmlEngine核心架构与应用摘要 QQmlEngine是Qt QML模块的核心引擎,负责管理QML应用的整个生命周期。它提供四大核心功能:1) 创建初始化引擎并配置基础路径;2) 上下文管理系统支持全局和局部变量;3) 类型注册系统支持自定义组件和单例;4) 组件加载机制支持静态和动态创建。高级应用包括网络资源定制、动态图片生成、内存管理优化和JavaScript扩展。企业级应用可采用微前端架构、混合渲染管道和安全沙箱系统。QQmlEngine通过完善的API和扩展机制,为QML应用开发提供强大支持。原创 2025-09-12 14:16:52 · 690 阅读 · 0 评论 -
QMLContext详解
QML上下文详解 QML上下文是QML应用程序的核心执行环境,主要特点包括: 上下文层级:形成树状结构,包含对象实例、属性、函数和作用域关系 关键属性: 全局Qt对象提供版本和平台信息 parent属性实现父子对象访问 id属性允许同级对象引用 作用域规则: 组件内部形成独立作用域 子对象可访问父对象属性 JavaScript块继承所在对象上下文 动态对象创建: 通过Component.createObject()或Qt.createQmlObject() 新对象继承创建时的上下文环境 属性查找顺序遵循从当原创 2025-09-12 14:15:26 · 504 阅读 · 0 评论 -
QML模块全景解析
本文全面解析了QML模块体系,包含基础UI、图形媒体、位置服务等6大类20+模块的详细对照表,每个模块标注了导入路径、主要功能和最低Qt版本要求。文章提供了模块导入最佳实践,包括按需导入、版本控制和性能优化建议,并展示了企业级应用的典型模块组合架构。特别分析了Qt6的模块演进趋势,包括新增核心模块和性能优化方向。最后详述了QtQuick基础控件和布局系统的组成,为开发者提供全面的QML模块技术参考。原创 2025-09-09 16:53:06 · 1124 阅读 · 0 评论 -
QML和Qt Quick
QML是Qt的声明式编程语言,用于定义界面结构和行为,而Qt Quick是基于QML的框架,提供UI组件和运行时环境。QML是语言本身(支持属性绑定、JavaScript等),Qt Quick则是应用开发框架(包含可视化组件如Rectangle、Text等)。实际开发中二者通常结合使用,QML负责逻辑描述,Qt Quick提供UI构建能力。纯QML适合数据建模,Qt Quick适合构建完整GUI应用。QML如同HTML+CSS+JS,Qt Quick则类似React/Vue框架,二者共同构成Qt的声明式UI原创 2025-09-09 16:52:10 · 825 阅读 · 0 评论 -
QML 动态加载组件指南
QML动态加载组件技术指南:详解Loader、createComponent和createQmlObject三种核心方法,涵盖参数传递、状态监控和异步加载等高级技巧。特别强调生命周期管理(自动/手动销毁)和性能优化策略(对象池、预加载),并提供企业级应用模式如模块化架构和插件化设计。包含安全沙箱加载等实用方案,帮助开发者构建高效灵活的QML应用。原创 2025-09-06 09:46:54 · 789 阅读 · 1 评论 -
第一个QML程序
本文介绍了两种在Qt Quick中加载QML窗口的方法:通过QQmlApplicationEngine和QQuickView。QQmlApplicationEngine方式需要QML文件包含Window组件,适合复杂应用和多文件交互;而QQuickView自身作为窗口容器,要求QML文件不能包含顶层Window。文章详细对比了两种方法的实现步骤和注意事项,包括CMake配置、代码示例和常见错误处理,帮助开发者根据需求选择合适的方式构建Qt Quick应用。原创 2025-09-06 09:41:32 · 502 阅读 · 0 评论 -
在MFC中使用Qt(七):深入了解QWinWidget
总结来说,QWinWidget通过将Qt部件嵌入到原生窗口,并管理焦点、事件和窗口样式,实现了Qt与原生Win32/MFC应用程序的集成。实际开发使用时需要注意不同Qt版本的差异,正确处理窗口消息,管理焦点和事件传递,以及确保窗口样式的正确设置,以避免潜在的UI问题。原创 2025-04-03 16:16:44 · 1265 阅读 · 0 评论 -
在MFC中使用Qt(六):深入了解QMfcApp
QMfcApp 未同时运行两个独立事件循环Qt 主循环驱动:通过处理所有消息(包括 MFC 窗口消息)。MFC 逻辑嵌入:消息过滤器和钩子确保 MFC 的OnIdle等关键逻辑被触发。无阻塞设计:Qt 的exec()内部以非阻塞方式轮询消息,避免独占线程。这种设计使得 MFC 窗口能够响应消息,而 Qt 控件也能正常更新,实现无缝混合运行。原创 2025-03-31 11:29:00 · 1258 阅读 · 0 评论 -
在MFC中使用Qt(五):MFC和Qt的共存和交互
集成消息循环:使用QMfcApp或类似方法,将Qt事件循环嵌入到MFC的消息循环中,避免阻塞。正确处理窗口消息:通过QWinWidget等机制,确保Qt控件接收并处理相关消息,未被处理的消息传递给MFC。信号与MFC交互:使用中间对象或适配器,将Qt信号转换为MFC的消息或方法调用。事件过滤与协调:在必要时,通过事件过滤器或重写事件处理函数,控制事件的传递路径,避免冲突。通过上述方法,MFC 和 Qt 的事件处理机制可以高效共存,实现功能互补。原创 2025-03-31 11:26:00 · 2397 阅读 · 0 评论 -
在MFC中使用Qt(四):使用属性表(Property Sheet)实现自动化Qt编译流程
方式三:使用属性表,本质上还是和方式二:编辑项目文件一样,只是没有直接编辑项目文件,而是通过创建一个同样的QtAuto.props,再导入到当前项目文件中。通过这种方式可以实现Qt自动化编译流程属性配置的复用,在多人协同开发情况下,其中一人配置好通用的Qt自动化编译流程配置属性表,直接通过该属性表,可直接再另一个人的开发环境中导入配置使用,而无需再另外配置。原创 2025-03-28 11:03:50 · 871 阅读 · 0 评论 -
在MFC中使用Qt(三):通过编辑项目文件(.vcxproj)实现Qt的自动化编译流程
编辑项目文件(.vcxproj)实现自动化Qt编译流程方式,本质还是MFC项目。因此相较于在MFC中使用Qt(二):实现Qt文件的自动编译流程还是需要在项目属性中添加要使用的本地Qt模块的包含目录、附件库目录和库文件。原创 2025-03-28 11:02:21 · 1078 阅读 · 0 评论 -
在MFC中使用Qt(二):实现Qt文件的自动编译流程
借助Qt Visual Studio Tools实现自动编译方式,简单快捷,且没有如手动编译流程中提到的(配置本地Qt包含目录、附加库目录、导入库、再手动添加编译后的文件等)众多手动介入的配置,因此这里是推荐使用该方法实现在MFC中使用Qt的。当然,也可以对比下后续文章介绍的:方式二:通过编辑项目文件(.vcxproj)实现自动化Qt编译流程。方式三:使用属性表(Property Sheet)实现自动化Qt编译流程。原创 2025-03-26 21:48:44 · 1279 阅读 · 1 评论 -
在MFC中使用Qt(一):玩腻了MFC,试试在MFC中使用Qt!(手动配置编译Qt)
现在总结一下,要想在C++/MFC项目中使用Qt库,你需要:①两个文件(qmfcapp.h、qmfcapp.cpp)、两行代码(QMfcApp::instance(this);)配置Qt环境。②配置项目。在项目属性中添加要使用的本地Qt模块的包含目录、附件库目录和库文件。③添加Qt控件(文件)到MFC项目中,手动配置需要Qt工具编译的Qt文件(.ui、.qrc、带Q_OBJECT的.h)④手动编译后,将编译后的输出文件也添加到MFC项目中。⑤MFC项目中添加需要的与Qt控件的交互。原创 2025-03-26 21:28:37 · 1901 阅读 · 1 评论 -
一键换肤的Qt-Advanced-Stylesheets
通过对Qt-Advanced-Stylesheets源码阅读及本地调试,剖析了Qt-Advanced-Stylesheets项目一键动态切换主题功能的核心实现,即通过不同的风格 -> 主题 -> 样式配置架构管控软件整体风格样式。需要注意的是控件相关样式设置需在CSS文件中配置,若在代码或ui文件中设置会无法动态切换,同时需要注意css文件中的颜色值需要通过颜色模板变量而不是具体数值设置。而对于混框架(如Qt + MFC)大型项目的一键切换风格主题样式,能否借鉴该实现方式,有待商榷。原创 2025-03-11 21:15:03 · 1938 阅读 · 2 评论 -
Qt开源控件库(qt-material-widgets)的编译及使用
综上,本文通过简单示例,详细介绍了自己克隆并编译开源控件库,然后应用在自己的项目中的完整流程及注意事项。通过该开源控件库项目,可学到动态库项目的编译和使用以及pimpl设计模式在项目中的实际应用,相信对实际工作会有一定的帮助。原创 2025-03-11 21:05:28 · 3926 阅读 · 1 评论 -
DBus名词术语命名规范详解:构建清晰、规范的DBus通信
DBus的命名规范是确保DBus通信清晰性和规范性的关键。通过本文的详细解析,相信您对DBus中涉及的名词术语的命名规范有了更全面的理解。在实际项目中,遵循DBus命名规范可以显著提升代码的可读性和可维护性,同时确保不同应用程序和服务之间的兼容性。原创 2025-03-07 21:09:12 · 1136 阅读 · 0 评论 -
QDBus:Qt对DBus的封装支持
QDBusAbstractAdaptor用于将本地Qt对象暴露为DBus服务。通过继承QDBusAbstractAdaptor,开发者可以将Qt对象的信号、槽和属性暴露给DBus总线,供其他进程调用。Q_OBJECTQ_OBJECTpublic:QDBus是Qt框架中用于DBus通信的核心模块,它将DBus协议的复杂性与Qt的信号槽机制结合,为开发者提供了高效、易用的进程间通信工具。通过本文的深入解析,相信您对QDBus的关键特性、核心概念和应用场景有了更全面的理解。原创 2025-03-05 19:12:55 · 1260 阅读 · 0 评论 -
深入解析DBus协议:关键特性与核心概念
DBus协议为Linux桌面环境和系统服务提供了一种高效、灵活的进程间通信机制。通过本文的深入解析,相信您对DBus协议的关键特性、核心概念和应用场景有了更全面的理解。在实际项目中,合理使用DBus可以显著提升系统的模块化和灵活性。原创 2025-03-04 22:07:28 · 1147 阅读 · 0 评论 -
浅谈开发环境
工欲善其事,必先利其器。工作中经常用到的各种’东西’,如CMake、QMake、Make、MSBuildCLang、GCC、MinGW、MSVC等,有些在命名上有些类似,实际作用却不尽相同。因此这里换个角度来了解下这些‘东西’的作用,以及这些‘东西’之间的联系。原创 2025-03-04 22:04:12 · 1165 阅读 · 0 评论 -
Qt国际化
在全球化的今天,软件应用的国际化变得尤为重要。国际化不仅仅是翻译界面文本,更涉及到日期、时间、货币、数字格式等多方面的适应性调整。Qt作为一个强大的跨平台应用开发框架,提供了丰富的国际化支持工具,使得开发者可以轻松地将应用程序本地化到不同的语言和地区。本文将深入探讨Qt国际化的方方面面,包括工具使用、常见问题以及实际操作,帮助开发者掌握如何在Qt应用中实现高效的国际化,从而为全球用户提供更好的使用体验。原创 2024-08-02 17:44:40 · 1624 阅读 · 1 评论 -
Qt的事件处理机制、信号和槽以及两者之间的区别
本文详细介绍了Qt中的事件处理机制、信号和槽机制。并详细说明了信号和槽机制与事件系统是两个独立的系统,它们在内部工作方式上有所不同。最后以一个简单的按钮点击示例深入理解Qt中的事件处理机制、信号和槽机制的区别。原创 2024-08-02 17:44:03 · 1622 阅读 · 0 评论 -
Qt自定义带前后缀图标的PushButton
通过自定义QPushButton,重写paintEvent,同时保留setStyleSheet()设置的样式,来实现带前后缀图标的MPushButton,以满足特殊场景使用。这样实现的问题上面也有提到,自己绘制文本,需要考虑文本相关的样式(如text-align、padding)的影响。后续也可按需扩展维护hover、pressed、disabled状态的前后缀图标。原创 2024-07-25 16:41:34 · 983 阅读 · 0 评论 -
Qt样式表的底层实现原理
在Qt开发中,样式表(StyleSheet)是一个非常强大的工具,它允许我们通过类似于CSS的语法来定制控件的外观。然而,很多开发者对Qt样式表的底层实现原理并不清楚。本文将详细介绍Qt样式表的内部实现机制,并探讨在自定义控件中如何应用样式表。原创 2024-07-25 16:38:18 · 1256 阅读 · 0 评论 -
Qt是如何在C++基础上扩展的
本文从0开始新建C++和Qt项目,以此展开Qt是如何在C++基础上扩展的。Qt项目较C++项目的编译流程中添加了moc、uic、qrc编译以支持Qt扩展。最后简单介绍了Qt的动态属性和Q_PROPERTY两个在C++基础上扩展的核心特性。像其他的GUI、信号和槽、模型/视图、插件、绘图、动画等核心特性,实际应用较多,这里不再赘述。原创 2024-07-19 20:15:02 · 1168 阅读 · 0 评论 -
Qt中的高分辨率及缩放处理
如果希望当系统缩放设置增大时,应用能相应地缩小,以保持相同的视觉效果,可以自定义实现缩放处理。这通常被称为DPI缩放感知。注意这不是标准的缩放敏感性行为。通常,当用户增加系统的缩放设置时,他们期待更大的UI元素,以便在高分辨率上更容易阅读和操作。反过来,如果应用在用户增加系统缩放设置时缩小自己的UI,那么可能会引发用户的迷茫和困扰,因为他们把系统的缩放设置调大,却看到应用的UI反而变小了。大致原理如下:在软件初始化时,初始化并维护一个缩放因子。原创 2024-07-19 20:14:25 · 3295 阅读 · 0 评论 -
QtXlsx动态库编译(无需安装QtXlsx模块)
本文使用编译动态库的方式使用QtXlsx,而无需安装QtXlsx模块,方便快捷,将精力专注于使用而不是安装上面。原创 2024-04-11 11:44:27 · 1493 阅读 · 0 评论 -
给你的Qt软件加个授权
环境:Win11 64位核心思路:将授权相关信息加密保存到License.txt中,软件运行时获取并解密授权信息,判断是否在限制期限内即可。加解密部分使用第三方openssl库进行,因此需要手动在项目中链接下openssl库,参考步骤如下。原创 2024-04-11 09:37:59 · 2672 阅读 · 0 评论 -
乱码问题汇总
可以知道乱码的根本原因就是使用和数据源编码不一样的编码解码导致。如:BIG5解码GB2312编码内容,编解码不一致,必定会乱码。里有详细介绍、实现了各种方式的字符编码转换的接口,可按实际情况找到相应的接口转换。这里也记录下常见的乱码问题及解决方案供参考借鉴。原创 2024-01-12 17:12:41 · 2104 阅读 · 0 评论 -
QCustomplot2实战示例
QCustomPlot是一个用于绘制交互式图表和图形的开源C++库。它为Qt应用程序提供了强大的绘图功能,可用于创建各种类型的图表,如线图、柱状图、散点图、饼图等。QCustomPlot具有灵活的配置选项,可以自定义图表的外观和行为。该库易于使用且功能强大,适用于需要在Qt应用程序中显示和操作图表数据的开发项目。原创 2024-01-12 17:13:41 · 2202 阅读 · 0 评论 -
字符编码转换
本文详细介绍了宽窄字符和字符编码之间的关系,同时归纳了两种宽窄字符转换的情况:**一种是保持原有字符编码不变,仅进行宽窄字符类型的转换**。**另一种是即进行宽窄字符类型的转换,也进行字符编码的转换**。并给出了对应的测试示例及测试结果。原创 2024-01-03 21:50:21 · 2019 阅读 · 0 评论 -
std::setlocale详解
std::setlocale是C++标准库中的一个函数,用于设置当前程序的本地化(locale)环境。setlocale 函数安装指定的系统本地环境或其一部分,作为新的 C 本地环境。修改保持效果,并影响所有关乎本地环境的 C 库函数执行,到下次调用 setlocale 为止。原创 2024-01-03 21:00:37 · 2987 阅读 · 0 评论 -
字符集&字符编码
字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。而字符集(Character set)则是多个字符的集合。简单的说,字符集就规定了某个文字对应的二进制数字存放方式(编码)和某串二进制数值代表了哪个文字(解码)的转换关系。字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、GBK字符集、GB18030字符集、BIG5字符集、Unicode字符集等。。原创 2024-01-03 20:49:33 · 1579 阅读 · 0 评论 -
Pimpl模式
类的常规实现和Pimpl实现各有优劣。若只是为了快速开发且没有对外隐藏需求,常规实现无疑是很好的选择,若想要减少编译依赖且不想对外展示私有成员,可选择使用Pimpl实现,代价就是开发及维护成本的提高。原创 2023-08-26 11:52:29 · 727 阅读 · 0 评论 -
网络编程--多线程服务器客户端
虽然使用互斥量实现了简单的多线程服务器/客户端,但也只是借此熟悉下线程及线程同步相关的接口,可以明显的看到效率还是比较低下的。要想使用高效的Windows服务器客户端,可以使用IOCP完成端口实现。原创 2023-05-30 21:49:45 · 1118 阅读 · 2 评论 -
Qt--定时器事件和定时器类
使用定时器事件需要两步:①重写定时器事件函数②设置定时时间,开始定时例这里在Widget父窗口中重写定时器事件,并定时更新label内容。原创 2023-05-24 17:26:15 · 455 阅读 · 0 评论 -
Qt--事件过滤器
通过一个简单的示例熟悉事件过滤器的工作原理,同时也分析了和事件分发器的区别,相信在后续开发中,也可按照实际需要判断是否需要事件分发或过滤。原创 2023-05-24 16:55:02 · 5407 阅读 · 0 评论 -
Qt--事件分发器
在 Qt 中,事件分发器(Event Dispatcher)是一个核心概念,用于处理 GUI 应用程序中的事件。事件分发器负责将事件从一个对象传递到另一个对象,直到事件被处理或被取消。每个继承自QObject或QObject的类都可以在本类中重写bool event(QEvent *e),来实现相关事件的捕获和拦截。原创 2023-05-24 16:18:38 · 1573 阅读 · 0 评论 -
Qt--信号和槽
在Qt中,若窗口或控件当前的信号和槽不满足自己的需求,或者想使自己定义的类拥有其特有的信号和槽,Qt是支持使用自定义的信号和槽的。自定义信号和槽,需注意:①自定义信号和槽的类需继承自 QObject。自定义信号和槽必须继承自 QObject,因为它们是 Qt 元对象系统的一部分。②使用 Q_OBJECT 宏。为了使自定义信号和槽能够在运行时调用其 metaObject() 方法,必须在类的头文件中使用 Q_OBJECT 宏进行标记。原创 2023-05-23 17:18:45 · 1210 阅读 · 0 评论 -
Qt--对象树
Qt中的对象树机制,通俗来讲,就是当创建的对象,父窗口是QWidget或者是QObject派生下来的类,此对象就会放到父窗口的对象树上,当程序执行完毕,树上的内容会从下往上依次释放,而无需再手动释放。这里需要注意的,释放和析构的区别,这里的析构并不代表释放。析构只是清理一下相关信息,并没有真正释放对象。因此这里。如下:当释放最顶层Widget1窗口时,会。虽然从下往上释放,但也许通过上层窗口判断是否有子窗口,再执行子窗口的析构函数(这里没有释放),最后再执行释放。原创 2023-05-22 15:36:15 · 366 阅读 · 0 评论
分享