- 博客(134)
- 收藏
- 关注
原创 如何学习一门编程语言
学习一门新的编程语言,需要循序渐进,从基础到进阶,再到实践和精通。在这个过程中,保持兴趣、多动手实践、坚持不懈是非常重要的。
2025-04-03 16:17:29
208
原创 在MFC中使用Qt(七):深入了解QWinWidget
总结来说,QWinWidget通过将Qt部件嵌入到原生窗口,并管理焦点、事件和窗口样式,实现了Qt与原生Win32/MFC应用程序的集成。实际开发使用时需要注意不同Qt版本的差异,正确处理窗口消息,管理焦点和事件传递,以及确保窗口样式的正确设置,以避免潜在的UI问题。
2025-04-03 16:16:44
624
原创 在MFC中使用Qt(六):深入了解QMfcApp
QMfcApp 未同时运行两个独立事件循环Qt 主循环驱动:通过处理所有消息(包括 MFC 窗口消息)。MFC 逻辑嵌入:消息过滤器和钩子确保 MFC 的OnIdle等关键逻辑被触发。无阻塞设计:Qt 的exec()内部以非阻塞方式轮询消息,避免独占线程。这种设计使得 MFC 窗口能够响应消息,而 Qt 控件也能正常更新,实现无缝混合运行。
2025-03-31 11:29:00
771
原创 在MFC中使用Qt(五):MFC和Qt的共存和交互
集成消息循环:使用QMfcApp或类似方法,将Qt事件循环嵌入到MFC的消息循环中,避免阻塞。正确处理窗口消息:通过QWinWidget等机制,确保Qt控件接收并处理相关消息,未被处理的消息传递给MFC。信号与MFC交互:使用中间对象或适配器,将Qt信号转换为MFC的消息或方法调用。事件过滤与协调:在必要时,通过事件过滤器或重写事件处理函数,控制事件的传递路径,避免冲突。通过上述方法,MFC 和 Qt 的事件处理机制可以高效共存,实现功能互补。
2025-03-31 11:26:00
1174
原创 在MFC中使用Qt(四):使用属性表(Property Sheet)实现自动化Qt编译流程
方式三:使用属性表,本质上还是和方式二:编辑项目文件一样,只是没有直接编辑项目文件,而是通过创建一个同样的QtAuto.props,再导入到当前项目文件中。通过这种方式可以实现Qt自动化编译流程属性配置的复用,在多人协同开发情况下,其中一人配置好通用的Qt自动化编译流程配置属性表,直接通过该属性表,可直接再另一个人的开发环境中导入配置使用,而无需再另外配置。
2025-03-28 11:03:50
619
原创 在MFC中使用Qt(三):通过编辑项目文件(.vcxproj)实现Qt的自动化编译流程
编辑项目文件(.vcxproj)实现自动化Qt编译流程方式,本质还是MFC项目。因此相较于在MFC中使用Qt(二):实现Qt文件的自动编译流程还是需要在项目属性中添加要使用的本地Qt模块的包含目录、附件库目录和库文件。
2025-03-28 11:02:21
796
原创 在MFC中使用Qt(二):实现Qt文件的自动编译流程
借助Qt Visual Studio Tools实现自动编译方式,简单快捷,且没有如手动编译流程中提到的(配置本地Qt包含目录、附加库目录、导入库、再手动添加编译后的文件等)众多手动介入的配置,因此这里是推荐使用该方法实现在MFC中使用Qt的。当然,也可以对比下后续文章介绍的:方式二:通过编辑项目文件(.vcxproj)实现自动化Qt编译流程。方式三:使用属性表(Property Sheet)实现自动化Qt编译流程。
2025-03-26 21:48:44
869
原创 在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
796
原创 一键换肤的Qt-Advanced-Stylesheets
通过对Qt-Advanced-Stylesheets源码阅读及本地调试,剖析了Qt-Advanced-Stylesheets项目一键动态切换主题功能的核心实现,即通过不同的风格 -> 主题 -> 样式配置架构管控软件整体风格样式。需要注意的是控件相关样式设置需在CSS文件中配置,若在代码或ui文件中设置会无法动态切换,同时需要注意css文件中的颜色值需要通过颜色模板变量而不是具体数值设置。而对于混框架(如Qt + MFC)大型项目的一键切换风格主题样式,能否借鉴该实现方式,有待商榷。
2025-03-11 21:15:03
919
原创 Qt开源控件库(qt-material-widgets)的编译及使用
综上,本文通过简单示例,详细介绍了自己克隆并编译开源控件库,然后应用在自己的项目中的完整流程及注意事项。通过该开源控件库项目,可学到动态库项目的编译和使用以及pimpl设计模式在项目中的实际应用,相信对实际工作会有一定的帮助。
2025-03-11 21:05:28
1495
原创 DBus名词术语命名规范详解:构建清晰、规范的DBus通信
DBus的命名规范是确保DBus通信清晰性和规范性的关键。通过本文的详细解析,相信您对DBus中涉及的名词术语的命名规范有了更全面的理解。在实际项目中,遵循DBus命名规范可以显著提升代码的可读性和可维护性,同时确保不同应用程序和服务之间的兼容性。
2025-03-07 21:09:12
859
原创 ❌Manus?✅OpenManus + DeepSeek!!!
Manus 是由中国团队 Monica.im 开发的全球首款通用型 AI Agent(智能体)产品。其名称源自拉丁文 “mens et manus”(知行合一),强调“手脑并用”的能力——不仅能思考,还能自主执行复杂任务并交付成果。
2025-03-07 21:02:25
1458
2
原创 QDBus:Qt对DBus的封装支持
QDBusAbstractAdaptor用于将本地Qt对象暴露为DBus服务。通过继承QDBusAbstractAdaptor,开发者可以将Qt对象的信号、槽和属性暴露给DBus总线,供其他进程调用。Q_OBJECTQ_OBJECTpublic:QDBus是Qt框架中用于DBus通信的核心模块,它将DBus协议的复杂性与Qt的信号槽机制结合,为开发者提供了高效、易用的进程间通信工具。通过本文的深入解析,相信您对QDBus的关键特性、核心概念和应用场景有了更全面的理解。
2025-03-05 19:12:55
777
原创 深入解析DBus协议:关键特性与核心概念
DBus协议为Linux桌面环境和系统服务提供了一种高效、灵活的进程间通信机制。通过本文的深入解析,相信您对DBus协议的关键特性、核心概念和应用场景有了更全面的理解。在实际项目中,合理使用DBus可以显著提升系统的模块化和灵活性。
2025-03-04 22:07:28
704
原创 浅谈开发环境
工欲善其事,必先利其器。工作中经常用到的各种’东西’,如CMake、QMake、Make、MSBuildCLang、GCC、MinGW、MSVC等,有些在命名上有些类似,实际作用却不尽相同。因此这里换个角度来了解下这些‘东西’的作用,以及这些‘东西’之间的联系。
2025-03-04 22:04:12
895
原创 Qt国际化
在全球化的今天,软件应用的国际化变得尤为重要。国际化不仅仅是翻译界面文本,更涉及到日期、时间、货币、数字格式等多方面的适应性调整。Qt作为一个强大的跨平台应用开发框架,提供了丰富的国际化支持工具,使得开发者可以轻松地将应用程序本地化到不同的语言和地区。本文将深入探讨Qt国际化的方方面面,包括工具使用、常见问题以及实际操作,帮助开发者掌握如何在Qt应用中实现高效的国际化,从而为全球用户提供更好的使用体验。
2024-08-02 17:44:40
1298
2
原创 Qt的事件处理机制、信号和槽以及两者之间的区别
本文详细介绍了Qt中的事件处理机制、信号和槽机制。并详细说明了信号和槽机制与事件系统是两个独立的系统,它们在内部工作方式上有所不同。最后以一个简单的按钮点击示例深入理解Qt中的事件处理机制、信号和槽机制的区别。
2024-08-02 17:44:03
1297
原创 Qt自定义带前后缀图标的PushButton
通过自定义QPushButton,重写paintEvent,同时保留setStyleSheet()设置的样式,来实现带前后缀图标的MPushButton,以满足特殊场景使用。这样实现的问题上面也有提到,自己绘制文本,需要考虑文本相关的样式(如text-align、padding)的影响。后续也可按需扩展维护hover、pressed、disabled状态的前后缀图标。
2024-07-25 16:41:34
789
原创 Qt样式表的底层实现原理
在Qt开发中,样式表(StyleSheet)是一个非常强大的工具,它允许我们通过类似于CSS的语法来定制控件的外观。然而,很多开发者对Qt样式表的底层实现原理并不清楚。本文将详细介绍Qt样式表的内部实现机制,并探讨在自定义控件中如何应用样式表。
2024-07-25 16:38:18
882
原创 Qt是如何在C++基础上扩展的
本文从0开始新建C++和Qt项目,以此展开Qt是如何在C++基础上扩展的。Qt项目较C++项目的编译流程中添加了moc、uic、qrc编译以支持Qt扩展。最后简单介绍了Qt的动态属性和Q_PROPERTY两个在C++基础上扩展的核心特性。像其他的GUI、信号和槽、模型/视图、插件、绘图、动画等核心特性,实际应用较多,这里不再赘述。
2024-07-19 20:15:02
979
原创 Qt中的高分辨率及缩放处理
如果希望当系统缩放设置增大时,应用能相应地缩小,以保持相同的视觉效果,可以自定义实现缩放处理。这通常被称为DPI缩放感知。注意这不是标准的缩放敏感性行为。通常,当用户增加系统的缩放设置时,他们期待更大的UI元素,以便在高分辨率上更容易阅读和操作。反过来,如果应用在用户增加系统缩放设置时缩小自己的UI,那么可能会引发用户的迷茫和困扰,因为他们把系统的缩放设置调大,却看到应用的UI反而变小了。大致原理如下:在软件初始化时,初始化并维护一个缩放因子。
2024-07-19 20:14:25
2502
原创 QtXlsx动态库编译(无需安装QtXlsx模块)
本文使用编译动态库的方式使用QtXlsx,而无需安装QtXlsx模块,方便快捷,将精力专注于使用而不是安装上面。
2024-04-11 11:44:27
1048
原创 给你的Qt软件加个授权
环境:Win11 64位核心思路:将授权相关信息加密保存到License.txt中,软件运行时获取并解密授权信息,判断是否在限制期限内即可。加解密部分使用第三方openssl库进行,因此需要手动在项目中链接下openssl库,参考步骤如下。
2024-04-11 09:37:59
1839
原创 QCustomplot2实战示例
QCustomPlot是一个用于绘制交互式图表和图形的开源C++库。它为Qt应用程序提供了强大的绘图功能,可用于创建各种类型的图表,如线图、柱状图、散点图、饼图等。QCustomPlot具有灵活的配置选项,可以自定义图表的外观和行为。该库易于使用且功能强大,适用于需要在Qt应用程序中显示和操作图表数据的开发项目。
2024-01-12 17:13:41
1760
原创 乱码问题汇总
可以知道乱码的根本原因就是使用和数据源编码不一样的编码解码导致。如:BIG5解码GB2312编码内容,编解码不一致,必定会乱码。里有详细介绍、实现了各种方式的字符编码转换的接口,可按实际情况找到相应的接口转换。这里也记录下常见的乱码问题及解决方案供参考借鉴。
2024-01-12 17:12:41
1637
原创 字符编码转换
本文详细介绍了宽窄字符和字符编码之间的关系,同时归纳了两种宽窄字符转换的情况:**一种是保持原有字符编码不变,仅进行宽窄字符类型的转换**。**另一种是即进行宽窄字符类型的转换,也进行字符编码的转换**。并给出了对应的测试示例及测试结果。
2024-01-03 21:50:21
1602
原创 std::setlocale详解
std::setlocale是C++标准库中的一个函数,用于设置当前程序的本地化(locale)环境。setlocale 函数安装指定的系统本地环境或其一部分,作为新的 C 本地环境。修改保持效果,并影响所有关乎本地环境的 C 库函数执行,到下次调用 setlocale 为止。
2024-01-03 21:00:37
2541
原创 字符集&字符编码
字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。而字符集(Character set)则是多个字符的集合。简单的说,字符集就规定了某个文字对应的二进制数字存放方式(编码)和某串二进制数值代表了哪个文字(解码)的转换关系。字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、GBK字符集、GB18030字符集、BIG5字符集、Unicode字符集等。。
2024-01-03 20:49:33
1362
原创 Pimpl模式
类的常规实现和Pimpl实现各有优劣。若只是为了快速开发且没有对外隐藏需求,常规实现无疑是很好的选择,若想要减少编译依赖且不想对外展示私有成员,可选择使用Pimpl实现,代价就是开发及维护成本的提高。
2023-08-26 11:52:29
612
原创 Qt--QPlugin插件
自定义插件时,要先创建一个接口,作为插件类的基类。因为插件存储在一个dll中,因此可以动态的加载。创建一个插件包含以下几步:①定义一个接口类(只有纯虚函数的抽象类)②使用Q_DECLARE_INTERFACE()宏在Qt的元对象系统中注册该接口③再定义一个插件类,必须继承自QObject类和上面创建的接口类,且需先继承QObject④在插件类中使用Q_INTERFACE()宏在Qt的元对象系统中注册该接口⑤使用Q_PLUGIN_METADATa()宏导出该插件。
2023-08-06 11:24:20
1844
原创 Qt--动态链接库的创建和使用
综上,简单介绍了Qt动态链接库的创建和使用,使用时也分别示例的静态加载和动态加载的区别。需要注意的是:①静态加载添加.lib文件时,因Qt版本不同,可能需要加上.lib后缀。②动态加载时,只能加载extern"C"的全局函数,不能加载类,因此在Qt中,一般不会使用这种加载方式。若想使用动态加载,且用到导出类时,Qt中提供了QPluginLoader插件类来实现,这个会在之后的文章中详细介绍。
2023-08-05 11:55:49
3042
原创 网络编程--多线程服务器客户端
虽然使用互斥量实现了简单的多线程服务器/客户端,但也只是借此熟悉下线程及线程同步相关的接口,可以明显的看到效率还是比较低下的。要想使用高效的Windows服务器客户端,可以使用IOCP完成端口实现。
2023-05-30 21:49:45
964
2
原创 Qt--定时器事件和定时器类
使用定时器事件需要两步:①重写定时器事件函数②设置定时时间,开始定时例这里在Widget父窗口中重写定时器事件,并定时更新label内容。
2023-05-24 17:26:15
319
原创 Qt--事件过滤器
通过一个简单的示例熟悉事件过滤器的工作原理,同时也分析了和事件分发器的区别,相信在后续开发中,也可按照实际需要判断是否需要事件分发或过滤。
2023-05-24 16:55:02
4859
原创 Qt--事件分发器
在 Qt 中,事件分发器(Event Dispatcher)是一个核心概念,用于处理 GUI 应用程序中的事件。事件分发器负责将事件从一个对象传递到另一个对象,直到事件被处理或被取消。每个继承自QObject或QObject的类都可以在本类中重写bool event(QEvent *e),来实现相关事件的捕获和拦截。
2023-05-24 16:18:38
1332
原创 Qt--自定义控件
这里以 SpinBox和HorizontalSlider 组合的自定义控件为例,介绍常规的自定义控件的开发步骤。假设这里有一个Widget项目,作为工作项目。右键项目 -》添加新文件, 选择Qt -》Qt设计器界面类:选择自定义控件的父类:输入自定义控件类的名称:最后会给出添加的文件:添加完成后可以看到.pro文件中自动添加了自定义类的.h .cpp以及ui文件,另外在界面文件中,也多了一个smallwidget.ui文件:然后就可以在smallwidget.ui文件中设计我们的自定义控件了。
2023-05-24 14:59:03
7003
3
原创 Qt--信号和槽
在Qt中,若窗口或控件当前的信号和槽不满足自己的需求,或者想使自己定义的类拥有其特有的信号和槽,Qt是支持使用自定义的信号和槽的。自定义信号和槽,需注意:①自定义信号和槽的类需继承自 QObject。自定义信号和槽必须继承自 QObject,因为它们是 Qt 元对象系统的一部分。②使用 Q_OBJECT 宏。为了使自定义信号和槽能够在运行时调用其 metaObject() 方法,必须在类的头文件中使用 Q_OBJECT 宏进行标记。
2023-05-23 17:18:45
1030
原创 Qt--对象树
Qt中的对象树机制,通俗来讲,就是当创建的对象,父窗口是QWidget或者是QObject派生下来的类,此对象就会放到父窗口的对象树上,当程序执行完毕,树上的内容会从下往上依次释放,而无需再手动释放。这里需要注意的,释放和析构的区别,这里的析构并不代表释放。析构只是清理一下相关信息,并没有真正释放对象。因此这里。如下:当释放最顶层Widget1窗口时,会。虽然从下往上释放,但也许通过上层窗口判断是否有子窗口,再执行子窗口的析构函数(这里没有释放),最后再执行释放。
2023-05-22 15:36:15
255
原创 Qt--快捷键
帮助文档 F1 或 左侧帮助 或 安装目录下的assistant.exe,例我的安装目录为:D:\QtInstallPath\6.5.0\mingw_64\bin\assistant.exe。整行移动 ctrl + shift + ⬆ 或 ⬇。字体缩放 ctrl + 鼠标滚轮。自动对齐 ctrrl + i。查找/替换 ctrl + f。同名h和cpp文件切换 F4。运行 ctrl + r。编译 ctrl + b。注释 ctrl + /
2023-05-22 14:56:50
118
空空如也
#C++#类的静态成员函数竟可调用虚函数, 如何解释?
2022-08-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人