- 博客(48)
- 收藏
- 关注
原创 qt怎么自定义日志
Qt日志系统定制指南:通过两种互补方式实现高效日志管理。一是使用qInstallMessageHandler全局接管日志输出,实现统一格式化和多目标写入;二是利用QLoggingCategory进行模块化日志分类,支持动态控制不同模块的日志级别。最佳实践是将两者结合:先用日志分类实现精细控制,再通过自定义处理器统一输出到文件和控制台。文中提供了完整实现方案,包括线程安全处理、模块隔离、性能优化和动态配置等功能,适用于从简单到复杂的各种项目需求。
2025-12-05 09:14:23
575
原创 qt怎么将模块注册成插件
摘要:Qt插件注册的核心是通过元对象系统识别和加载插件。主要步骤包括:1)定义纯虚接口类并使用Q_DECLARE_INTERFACE宏声明;2)实现插件类继承QObject和接口,使用Q_INTERFACES和Q_PLUGIN_METADATA宏;3)将项目配置为动态库。主程序通过QPluginLoader加载插件,用qobject_cast转换接口后调用功能。注意接口ID必须一致,且需确保构建模式和Qt版本匹配。静态插件需额外使用Q_IMPORT_PLUGIN宏。调试时可设置QT_DEBUG_PLUGIN
2025-12-04 15:10:14
272
原创 OpenCV 视频处理
OpenCV视频处理摘要:OpenCV提供了强大的视频处理功能,包括视频读取(VideoCapture)、帧处理、保存(VideoWriter)和实时处理。主要应用包括视频监控、运动检测、实时滤镜和目标跟踪。核心操作包含:1)读取/显示视频帧;2)视频保存;3)帧处理(灰度转换、边缘检测);4)摄像头实时处理;5)高级技术如背景减除和光流计算。通过VideoCapture类可处理视频文件或摄像头输入,结合图像处理算法实现实时分析。典型应用场景包括运动物体检测、行为分析和实时视频增强。
2025-10-27 17:30:53
550
原创 OpenCV 高级图像处理
高级图像处理技术包括图像分割、轮廓检测、形态学操作和模板匹配等方法,广泛应用于医学影像分析、目标检测和图像增强等领域。图像分割技术通过阈值、边缘和区域分割来提取目标区域;轮廓检测用于识别对象边界并计算特征;形态学操作可去除噪声和填充孔洞;模板匹配则用于在图像中定位特定对象。这些方法通过OpenCV等工具库实现,为计算机视觉任务提供强大的技术支持。
2025-10-27 17:12:31
882
原创 OpenCV 特征检测与描述
本文系统介绍了计算机视觉中的特征检测与描述技术。主要内容包括:1)核心概念:特征检测(提取关键点)、特征描述(计算描述符)和特征匹配(关键点对应);2)典型应用场景:图像拼接、目标识别、3D重建和实时跟踪;3)常用算法比较:详细对比了SIFT、SURF、ORB等算法的特点及适用场景;4)技术实现:通过OpenCV代码示例演示了角点检测(Harris/Shi-Tomasi)、特征点检测(SIFT/SURF/ORB)以及特征匹配(BFMatcher/FLANN)的实现方法;5)匹配优化:介绍了基于距离和几何约束
2025-09-30 11:33:55
2586
原创 OpenCV 基本模块
OpenCV是一个功能强大的计算机视觉库,包含多个核心模块,每个模块专注于不同的任务。主要包括Core(基础数据结构)、Imgproc(图像处理)、Highgui(显示交互)、Video(视频处理)、Calib3d(相机标定)、DNN(深度学习)等模块。Core提供矩阵操作和文件I/O,Imgproc实现滤波、边缘检测等算法,Highgui负责图像显示和用户交互,Video处理视频捕获和分析,Calib3d用于3D重建和姿态估计,DNN支持主流深度学习框架的模型推理。这些模块共同构成了OpenCV完整的计算
2025-09-30 11:19:30
809
原创 OpenCV基础操作与图像处理
本文系统介绍了OpenCV图像处理的基础操作和进阶技术。基础部分涵盖图像读取/显示/保存、像素操作、几何变换(缩放/旋转/平移/仿射变换)和颜色空间转换(RGB/灰度/HSV等)。进阶处理技术包括图像滤波(均值/高斯/中值滤波)、边缘检测(Sobel/Canny)、形态学操作(腐蚀/膨胀/开闭运算)、阈值化处理(二值化/自适应/Otsu)以及直方图分析等。每个技术点均配有C++代码示例,如均值滤波使用blur()函数,Canny边缘检测通过Canny()实现,形态学操作使用erode()/dilate()等
2025-09-30 11:08:17
846
原创 qt模型视图架构使用时需要注意什么
本文详细介绍了Qt模型/视图架构的使用注意事项和最佳实践。主要内容包括:1)严格遵循模型与视图分离原则,通过模型接口操作数据;2)正确处理模型更新信号机制,区分数据变更和结构变更的不同通知方式;3)针对影响排序的数据修改,提供了四种解决方案(移除再插入、layoutChanged、代理模型和手动移动);4)性能优化建议,如避免过度使用resetModel、批量操作等;5)代理模型和委托的使用技巧;6)强调线程安全原则,禁止跨线程直接修改模型。文章还总结了最佳实践清单,帮助开发者构建高效稳定的Qt应用。
2025-09-17 14:34:29
1158
原创 QML中的动画
本文全面介绍了QML动画的实现方法,涵盖基础动画类型(属性/数值/颜色/旋转动画)、组合动画(顺序/并行/嵌套动画)、缓动曲线设置、状态转换动画和条件行为动画。同时讲解了高级动画控制技巧(播放/暂停/跳转)、自定义动画组件、性能优化方法(硬件加速/缓存)以及实用动画模式(弹跳/闪烁效果)。最后提供了调试技巧和最佳实践建议,包括动画时长控制、风格一致性和性能测试,帮助开发者创建流畅美观的用户界面。
2025-09-09 18:45:33
845
原创 QML中的Popup
本文详细介绍了QML中Popup组件的使用方法,主要包括: 基础用法与核心属性设置 多种关闭策略组合和自定义关闭逻辑 动态定位和响应式布局技巧 高级动画效果实现 动态内容加载和弹出框堆栈管理 拖拽支持和键盘导航等交互模式 性能优化和内存管理方案 主题化和特殊视觉效果实现 测试与调试支持 总结了使用Popup组件的最佳实践,包括合理设置父级、关闭策略、键盘导航等内容。
2025-09-09 15:18:35
447
原创 QML 中 的 Row 和 RowLayout
《Row与RowLayout在QML中的核心区别与用法指南》 摘要:本文对比了QtQuick中Row和RowLayout两种水平布局方式的本质差异。Row作为简单排列容器,采用固定尺寸管理,适合轻量级布局需求;而RowLayout作为智能布局管理器,支持弹性尺寸和精细对齐控制,适用于复杂界面设计。文章详细解析了两者的语法结构、属性设置和典型应用场景,并提供了选择建议:简单排列用Row,复杂响应式布局用RowLayout。通过多个实用代码示例,展示了如何避免常见错误并实现高效布局,最后还介绍了嵌套使用、锚点结
2025-08-25 19:43:43
1046
原创 QML中的Component
QML中的Component是用于创建可复用UI组件的核心机制,它支持内联定义和外部文件两种形式。关键特性包括:作为对象模板而非可视化元素、需要实例化后才能使用。主要创建方式有静态声明(直接使用组件)、动态实例化(createObject方法)、通过Loader加载以及作为Repeater的委托。最佳实践包括:妥善管理对象生命周期、进行错误处理、考虑性能优化(避免频繁创建/销毁)和正确使用作用域。Component适用于创建重要可重用组件(外部文件)、局部模板(内联定义)以及实现动态界面,是构建模块化QML
2025-08-25 19:18:31
888
原创 QML的loader
摘要:QML中的Loader组件用于动态加载QML文件,具有按需加载、动态切换和异步加载三大特性。核心语法为设置source指定组件路径,通过active控制加载状态。常见用法包括:延迟加载重量级组件、动态界面切换、平台适配组件加载等。最佳实践建议:使用异步加载避免卡顿、及时释放内存、正确处理加载状态和错误。高级用法可实现组件缓存和列表项懒加载。Loader是优化QML应用性能、提升代码模块化的重要工具,合理使用能显著改善应用启动时间和内存占用。
2025-08-25 19:06:25
1038
原创 QML中的QtObject
摘要: QtObject是QML中的轻量级非可视化元素,仅提供基础功能(属性、信号、槽等),无渲染开销。与可视化Item相比,QtObject更高效,适合数据存储、逻辑封装和属性分组。常见用途包括:组织相关属性、封装计算逻辑、轻量级状态管理、C++/QML数据桥接及动态对象创建。最佳实践包括优先用于非可视化场景、合理分组属性、使用只读属性,并注意其生命周期与性能优势。QtObject通过优化资源使用和提升代码可维护性,成为QML开发的核心工具之一。
2025-08-25 18:48:15
1232
1
原创 QML中的Connections
Connections是QML中处理信号连接的灵活组件,相比内联on<Signal>语法,它能连接任意可见范围内对象的信号。主要用途包括:连接非父级对象信号、动态创建对象信号、条件控制连接状态以及自定义组件通信。使用时需注意target为null的情况、作用域上下文和性能优化。最佳实践建议优先使用内联语法处理自身信号,明确命名目标对象,并合理处理动态目标。Connections特别适合实现松耦合组件间的通信,是QML信号处理的重要工具。
2025-08-25 17:22:16
1147
原创 git stash简单使用
Git stash 是一个实用的功能,用于临时保存未提交的修改。本文详细介绍了单条 stash 记录的操作方法:1. 创建记录(git stash push -m "描述");2. 查看列表(git stash list);3. 恢复记录(git stash apply stash@{n} 或 git stash pop);4. 删除记录(git stash drop);5. 查看内容(git stash show);6. 恢复单个文件。建议添加描述信息,定期清理旧记录,并合理使用分支管
2025-08-25 14:13:08
802
原创 标准输入输出函数
标准输入是指从键盘获取数据输入到内存中,键盘是标准输入设备。标准输出是把内存中的数据输出到显示器进行显示,显示器也称为标准输出设备。C语言本身并不提供输入输出语句,数据的输入输出是由库函数来完成的。要使用这些库函数,只需在程序的开头包含下列语句即可:#include
2024-03-05 19:27:52
1228
原创 操作系统概述学习笔记
一台主机连接多个带有显示器和键盘的终端,同时允许多个用户通过自己的终端,以交互方式使用计算机,共享主机中的资源。系统能即时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。操作系统,简称OS,是管理计算机硬件与软件资源的计算机程序。即资源共享,系统中的资源供多个并发执行的应用程序共同使用。同一时间间隔内执行和调度多个程序的能力。可靠性:多级容错,保障系统和数据的安全。多道程序环境下,允许多个程序并发执行。单处理机环境下,多个程序分时交替执行。足够小的内核,只实现。
2024-02-06 16:17:23
1130
原创 进程管理学习笔记
进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度的一个独立单位。进程是程序的一次执行进程是一个程序及其数据在处理机顺序执行时所发生的活动进程是程序在一个数据集合上运行的过程进程是系统进行资源分配和调度的一个独立单位(基本单位)进程的轻型实体,也叫“轻量级进程”,是一系列活动按事先设定好的顺序依次执行的过程,是一系列指令的集合是一条执行路径,不能单独存在,必须包含在进程中线程是OS中运算调度的最小单位。
2024-02-06 10:21:18
775
原创 C++类型转换运算符
类型转换是一种机制,让程序员能够暂时或永久性改变编译器对对象的解释。但这并不意味着程序员改变了对象本身,而只是改变了对对象的解释。可改变对象解释方式的运算符称为类型转换运算符。如果 C++应用程序都编写得很完善,其处于类型是安全的且是强类型的世界,则没有必要进行类型转换,也不需要类型转换运算符。然而,在现实世界中,不同模块往往由不同的人编写,而使用不同开发环境的厂商需要协作。因此,程序员经常需要让编译器按其所需的方式解释数据,让应用程序能够成功编译并正确执行。
2024-02-04 15:03:20
717
原创 C++流的输入输出
C++流是读写(输入和输出)逻辑的通用实现,让您能够用统一的模式读写数据。不管是磁盘或键盘读取数据,还是将输入写入显示器或磁盘,这些模式都相同。您只需使用合适的流类,类的实现将负责处理与设备和操作系统相关的细节。如std:cout 是 ostream 类的一个对象,用于输出到控制台。要使用 std::cout,需要包含提供它的头文件,这个头文件还提供了 std::cin,让您能够从流中读取数据。"
2024-02-02 14:57:45
1472
原创 函数对象与谓词
find_if()使用了一元谓词,这里将函数对象 IsMutilple 初始化为用户提供的除数,find_if() 对指定范围内的每个元素调用一元谓词 IsMutilple::operator( )。但从实现上说,函数对象是实现了 operator()的类的对象。虽然函数和函数指针也可归为函数对象,但只有实现了 operator()的类的对象才能保存状态(即类的成员属性的值),才能用于标准模板库(STL)算法。返回布尔类型的函数对象通常用于需要进行判断的算法,组合两个函数对象的函数对象称为自适应函数对象。
2024-02-02 13:56:21
723
原创 QTableWidget
下面是 MainWindow 类的定义代码,这个窗口类里没有自定义槽函数。Q_OBJECTprivate://单元格的类型,在创建单元格时用于设置 type//各字段在表格中的列号//状态栏上用于显示单元格的行号、列号//状态栏上用于显示单元格的 type//状态栏上用于显示单元格的 data//为某一行创建 itemspublic:private:在 MainWindow 类的构造函数中编写代码创建 3 个 QLabel 对象,并将其添加到状态栏上。// 状态栏初始化。
2023-10-23 19:05:35
2302
原创 QTreeWidget
QTreeWidget 是一种 Item Widget 组件。QTreeWidget 组件被称为树形组件,它的项(item)被称为节点,一个树形组件内的所有节点组成的结构称为目录树。树形组件适合显示具有层级结构的数据,例如 Windows 资源 管理器中显示的文件系统就是一种典型的层级结构。设计一个示例项目运行时界面如图所示。示例的窗口基类是 QMainWindow,通过 Action 设计了菜单栏和工具栏,这个示例实现了一个简单的图片管理器,主要会演示以下几个组件的使用方法。
2023-10-22 16:20:50
759
原创 qt模型/视图结构
模型/视图结构是一种将数据存储和界面展示分离的编程方法。模型存储数据,视图组件显示模型中的数据,在视图组件里修改的数据会被自动保存到模型里。模型的数据来源可以是内存中的字符串列表或二维表格型数据,也可以是数据库中的数据表,一种模型可以用不同的视图组件来显示数据,所以模型/视图结构是一种高效、灵活的编程结构。QAbstractItemModel 是所有模型类的直接或间接父类, 它定义了模型的通用接口函数,例如用于插入行、删除行、设置数据的函数。
2023-10-21 20:28:41
1661
2
原创 QToolButton 和 QListWidget
Qt 中用于处理项数据(item data)的组件有两类:一类是 Item Views 组件,包括 QListView、 QTreeView、QTableView 等;另一类是 Item Widgets 组件,包括 QListWidget、QTreeWidget、 QTableWidget 等。Item Views 组件用于模型/视图结构。Item Widgets组件使用起来稍微复杂一点。
2023-10-15 20:14:34
443
1
原创 qt-GUI 程序设计基础
信号与槽是 Qt 编程的基础,也是 Qt 的一大创新。有了信号与槽的编程机制,在 Qt 中处理界面上各个组件的交互操作就变得比较直观和简单。信号(signal)是在特定情况下被发射的通知,例如 QPushButton 较常见的信号就是点击鼠标时发射的 clicked()信号。GUI 程序设计的主要工作就是对界面上各组件的信号进行响应,只需要知道什么情况下发射哪些信号,合理地去响应和处理这些信号就可以了。槽(slot)是对信号进行响应的函数。槽就是函数,所以也称为槽函数。
2023-10-12 23:01:42
1177
原创 Qt 框架功能概述
头文件包含 Qt 框架中的一些全局定义,包括基本数据类型、函数和宏。一般的 Qt 类的头文件都会包含这个头文件,所以用户程序中无须包含这个头文件就可以使用其中的定义。中定义的数据类型Qt 数据类型POSIX 标准等效定义字节数qint81qint162qint32signed int4qint648qlonglong8quint81quint162quint324quint648quint648uchar1。
2023-10-09 22:50:58
2143
1
原创 qt标准对话框
Qt 为应用程序设计提供了一些常用的标准对话框,如打开文件对话框、选择颜色对话框、信息提示和确认选择对话框、标准输入对话框等,我们在设计程序时可以直接调用这些对话框。这些标准对话框类都提供了一些静态函数,通过这些静态函数就可以使用标准对话框的主要功能。Qt 预定义的各标准对话框类,及其主要静态函数的功能如下表所示。这里省略了函数的输入参数,只列出了函数的返回值类型。
2023-10-08 22:27:57
686
1
原创 qt文件系统操作和文件读写
Qt 中进行文件读写的基本的类是 QFile。QFile 的父类是 QFileDevice,QFileDevice 提供了文件交互操作的底层功能。QFileDevice 的父类是 QIODevice,它有两个父类:QObject 和 QIODeviceBase。
2023-10-07 22:58:14
2537
1
原创 qt事件处理
窗口系统是由事件驱动的,Qt 为事件处理编程提供了完善的支持。QWidget 类是所有界面组 件类的基类,QWidget 类定义了大量与事件处理相关的数据类型和接口函数。
2023-10-07 17:11:09
2346
1
原创 qt布局管理
使用 Qt Designer 可以很方便地进行布 局管理的可视化设计。布局管理也是通过一些类实现的,UI 文件经过 MOC 编译后,可视化设计 的布局管理会被转换为 C++代码。
2023-10-07 11:16:24
402
1
原创 qt界面组件概述
在 Qt 类库中,所有界面组件类的直接或间接父类都是 QWidget。QWidget 的父类是 QObject 和 QPaintDevice,所以 QWidget 是多重继承的类。QObject 支持元对象系统,其信号与槽机制为 GUI 编程中对象间通信提供了极大的便利。QPaintDevice 是能使用 QPainter 类在绘图设备上绘图的类。所有从 QWidget 继承而来的界面组件被称为 widget 组件,它们是构成 GUI 应用程序的窗口界面 的基本元素。
2023-10-07 10:44:39
1907
1
原创 QMainWindow 和 QAction
QMainWindow 是主窗口类,具有菜单栏、 工具栏、状态栏等主窗口常见的界面元素。要 设计主窗口上的菜单栏、工具栏、按钮的下拉 菜单、组件的快捷菜单等,需要用到 QAction 类。QAction 对象就是实现某个功能的“动作”, 我们称其为 Action。在 UI 可视化设计时,我们 可以设计很多 Action,然后用 Action 创建菜单 项和工具按钮。窗口基类 选择为 QMainWindow,示例运行时界面如下图所示。
2023-10-06 19:05:54
983
4
原创 QComboBox
QComboBox 是下拉列表框组件,它可以提供下拉列表供用户选择输入,也可以提供编辑框用于输入文字, 所以 QComboBox 也被称为组合框。下拉列表框的下拉列表的每个项(item, 或称为列表项)可以存储一个或多个 QVariant 类型的用户数据,用户数据并不显示在界面上。
2023-10-06 18:43:32
640
1
原创 QTimer 和 QElapsedTimer
QTimer 是软件定时器,其父类是 QObject。QTimer 的主 要功能是设置以毫秒为单位的定时周期,然后进行连续定时或 单次定时。启动定时器后,定时溢出时 QTimer 会发射 timeout() 信号,为 timeout()信号关联槽函数就可以进行定时处理。QElapsedTimer 用于快速计算两个事件的间隔时间,是软 件计时器。QElapsedTimer 没有父类,其计时精度可以达到纳 秒级。QElapsedTimer 的主要用途是比较精确地确定一段程序 运行的时长。
2023-10-06 18:35:15
4521
1
原创 qt日期时间数据
日期和时间是经常遇到的数据类型。Qt 定义了 3 个类用于表示和处理日期时间数据。• QTime:表示时间数据的类,时间数据如 12:04:35。• QDate:表示日期数据的类,日期数据如 2021-9-15。• QDateTime:表示日期时间数据的类,日期时间数据如 2021-09-16 17:22:43。这 3 个类都没有父类,它们只用于存储日期时间数据,并定义接口函数用于数据处理。为了 在界面上输入和显示日期时间数据,Qt 定义了几个用于日期时间数据处理的界面组件类。
2023-10-06 15:12:29
859
1
原创 QSlider 和 QProgressBar
QAbstractSlider 是 QSlider、QScrollBar 和 QDial 的父类,它定义了这几个类共有的一些属性 和接口函数。QAbstractSlider 定义的主要属性属性属性值类型功能minimumint数据范围的最小值,默认值是 0maximumint数据范围的最大值,默认值是 99singleStepint拖动滑动条上的滑块,或按下卷滚条两端的按钮时变化的最小数值,默认值是 1pageStepint。
2023-10-06 14:45:09
493
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅