- 博客(145)
- 资源 (4)
- 收藏
- 关注
原创 QT Qss
我项目里常用三种方式:单个控件直接 setStyleSheet、全局加载 qss 文件、按 objectName 精准控制样式,能实现圆角、变色、换肤等效果,和业务逻辑分离,维护方便。要不要我给你整理一份面试高频 QSS 样式代码片段(按钮、输入框、表格、树形、悬浮/选中态),你直接背就能写?• 作用:改控件外观(颜色、圆角、边框、背景、字体),不用改 C++ 逻辑。一句话:QSS 就是 Qt 的 CSS,用来美化控件、写界面样式,我项目里经常用。3. 动态换肤:多套 .qss,运行时切换。
2026-05-15 22:12:23
185
原创 QT视图界面
Qt 的 View 都继承自 QAbstractItemView,常用有 QListView、QTableView、QTreeView、QColumnView;它们遵循 Model/View 架构,数据和界面分离,可共享 Model。先一句话说清楚:Qt 里没有直接叫 QView 的类,所有“视图”都继承自 QAbstractItemView,常用的有 4 种标准 View,外加对应的“便捷 Widget”。• 内部自带 Model,不用自己写 Model,直接 addItem。
2026-05-15 22:10:00
243
原创 DDD设计模式例子
样本架(Rack):实体,有唯一ID,包含多个样本(Sample)。样本(Sample):值对象或实体(如果有唯一标识,例如样本编号)。站点(Station):实体,代表一个处理单元,如分注站、离心站、检测站等。每个站点有唯一ID,并有状态(空闲、忙碌、故障等)。流水线(Pipeline):可以看作是一个领域概念,由一系列站点组成,但调度逻辑可能不直接是流水线,而是调度器。调度器(Scheduler):领域服务,负责根据当前状态和规则决定样本架的下一个站点。
2025-12-25 13:50:35
872
原创 gprof性能分析工具的局限性
如果你需要更精准的多线程分析或实时性能监控,可以考虑使用其他工具,比如 `perf`、`Valgrind` 的 `callgrind`、`Intel VTune`、`Google CPU Profiler` 等。| 无法实时分析 | 只能事后分析,不能实时监控 |gprof 对多线程程序的分析支持较弱,无法准确区分不同线程的调用情况,导致分析结果不够精确。| 动态库调用分析有限 | 动态库内部调用关系不完整 |
2025-10-13 15:35:58
374
原创 Markdown 学习与参考地址
Markdown 官方文档(John Gruber)GitHub Markdown 指南Markdown 教程网站在线 Markdown 编辑器
2025-09-08 09:30:04
256
原创 深度学习书籍推荐
3. **工程实践**:用《Hands-On Machine Learning》或 fastai 的书做项目。2. **系统理解**:读《Deep Learning》(Goodfellow),掌握整体框架。- **《Dive into Deep Learning》(动手学深度学习,李沐等)**1. **快速入门**:先看《神经网络与深度学习》或《动手学深度学习》,做一些代码实验。4. **深入原理**:啃《PRML》和数学类书籍,补齐理论短板。- **《神经网络与深度学习》(邱锡鹏)**
2025-09-05 15:34:55
968
原创 聚类算法学习
划分方法 | K-Means, K-Medoids | 简单高效,适合球状簇 |- **软聚类(Fuzzy Clustering)**:每个样本属于多个簇,带有隶属度,如模糊C均值(FCM)。- **硬聚类(Hard Clustering)**:每个样本属于一个簇,如K-Means。- 代表算法:**K-Means**、K-Medoids(PAM)、CLARANS。- 代表算法:**AGNES**(凝聚式)、DIANA(分裂式)、BIRCH。
2025-07-02 19:19:44
573
原创 Json冲突崩溃问题
**原因**:若您的库和上位机主程序均静态链接了RapidJSON(如编译为`.a`或`.lib`),或通过不同方式包含头文件(如不同版本的RapidJSON头文件),可能导致同一符号(如类、函数)被多次定义,引发链接错误(`multiple definition`)。- 确保库与主程序使用**相同的编译器版本**(如GCC 10.2)、**C++标准**(如`-std=c++17`)及**STL实现**(如libstdc++ vs libc++)。
2025-03-25 10:35:46
551
原创 C++ 代码安全性口诀
std::unique_ptr` 和 `std::shared_ptr` 自动管理内存,避免内存泄漏。`std::lock_guard` 和 `std::unique_lock` 自动管理锁,避免死锁。`std::vector`、`std::array` 等容器比手动管理动态数组更安全。`std::format` 或 `snprintf` 比手动拼接字符串更安全。能使用 `std::string`,就不使用 C 风格字符串。`std::atomic` 比锁更高效,避免死锁。
2025-01-07 16:10:26
481
原创 加密算法及推荐
ECC(Elliptic Curve Cryptography):基于椭圆曲线的加密算法,提供与RSA相当的安全性,但密钥更短。- 对于需要高安全性的场合,推荐使用 AES 作为对称加密算法,因为它是目前最流行的对称加密算法,提供了很好的安全性和性能平衡。- SHA-2(包括 SHA-224、SHA-256、SHA-384、SHA-512):目前广泛使用,推荐使用。- RC4、RC5、RC6:较老的加密算法,RC4已被破解,不推荐使用。- SHA-1:已被宣布破解,不推荐用于安全要求高的场合。
2024-11-28 14:37:51
1147
原创 将多个库集成到一个库中
在这个 `CMakeLists.txt` 示例中,`clean` 目标用于删除旧的静态库,`all` 目标用于解压两个静态库,并将它们的 `.o` 文件合并到一个新的静态库 `liball.a` 中,然后删除临时的 `.o` 文件。3. 创建最终的静态库:`ar` 命令会创建一个新的静态库 `liball.a`,其中包含了所有 `.o` 文件。确保合并的库之间没有符号冲突或者重复定义。1. 解压静态库:使用 `ar` 命令将每个静态库解压到一个临时目录中,提取其中的 `.o` 文件。
2024-11-21 20:58:27
1043
原创 项目配置文件选择(Json,xml,Yaml, INI)
选择使用哪种类型的配置文件(如 JSON、XML 或其他格式)取决于多个因素,包括项目的需求、团队的熟悉程度、数据结构的复杂性以及可读性和可维护性等。- 简单配置:如果你的配置数据简单且不需要复杂的结构,使用 JSON 或 INI 文件是一个不错的选择。- 当需要一个易于阅读和维护的配置文件,且数据结构较复杂时,YAML 是一个很好的选择。- 可读性:如果可读性是首要考虑,YAML 是一个很好的选择,因为它的语法非常简洁。- 当配置数据非常简单,且不需要复杂的结构时,INI 文件是一个合适的选择。
2024-11-15 17:42:03
1645
原创 设计模式: Pimpl(Pointer to Implementation)
这种设计模式通常被称为,有时也被称为惯用法。它主要用于隐藏实现细节和减少编译依赖。
2024-10-24 20:04:51
724
原创 回调函数复习
这些是函数回调常见的应用场景,通过使用函数回调,可以实现程序的灵活性和可扩展性,将不同部分的逻辑解耦,使代码更易于维护和扩展。1. **事件处理**:在图形用户界面(GUI)编程中,可以使用函数回调来处理用户交互事件,例如按钮点击、鼠标移动等。7. **回调函数库**:一些库或框架提供回调函数接口,允许用户注册回调函数以实现自定义逻辑。2. **异步编程**:在异步编程中,可以使用函数回调来处理异步操作的结果或通知。3. **定时器**:在定时器编程中,可以使用函数回调来处理定时器触发的事件。
2024-07-31 17:43:02
297
原创 QT JSON使用实例
4. **main 函数**:创建 `BloodCellAnalyzer` 对象,获取状态,然后保存到JSON文件,最后创建 `FtpClient` 对象并上传文件。2. **JsonFileHandler 类**:提供一个静态方法 `saveToJsonFile()`,将 `QJsonObject` 保存为JSON文件。好的,下面是一个使用Qt框架的示例代码,展示如何获取血球仪器的状态,将其打包成JSON格式,保存到当前目录下的JSON文件中,然后通过FTP发送该文件。你还需要确保Qt的网络模块已启用。
2024-07-21 11:37:24
609
原创 单件s_instance作为类成员静态变量与函数静态局部变量的区别
在实际编程中,选择使用静态成员变量还是静态局部变量取决于需求,静态成员变量适合需要在整个类范围内共享的情况,而静态局部变量适合于函数内部需要保持状态或者进行延迟初始化的情况。- 静态局部变量是在函数内部声明为静态的变量,它们在函数第一次被调用时初始化,并且只初始化一次。- **可见性和作用域**:静态成员变量是类的一部分,可以被类的所有实例和静态成员函数访问;- **生命周期**:静态成员变量的生命周期与程序运行周期相同;- **初始化时机**:静态成员变量在类的定义文件中进行初始化;
2024-07-11 19:30:56
309
原创 单例例模式的懒汉模式和饿汉模式使用场景
如果系统资源较为紧张,或者单例对象初始化较为耗时,可以考虑使用懒汉模式,实现延迟加载,避免一开始就占用资源。1. 占用内存,因为实例在类加载时就创建并占用内存空间,如果实例化后长时间不使用,会浪费内存。- 如果单例对象的创建和初始化比较简单且对资源要求不高,可以选择饿汉模式,简化实现并确保线程安全。2. 实现起来相对复杂,需要考虑线程安全性,可能需要使用双重检查锁等机制,增加了代码复杂度。1. 线程安全,因为实例在类加载时就被创建,不存在多线程竞争的问题。
2024-07-11 17:52:56
459
原创 lib库接口设计的注意事项
综上所述,设计一个优秀的库需要综合考虑功能性、性能、安全性、可靠性和用户友好性等多个方面,以确保库能够满足用户的需求并具备良好的使用体验。- 良好的文档:提供详细的文档,包括函数用途、参数、返回值和示例,以便用户能快速上手和理解库的功能。- 平台无关性:考虑库在不同操作系统和硬件平台上的可移植性,避免使用平台特定的功能和API。- 健壮性:处理可能的错误和异常情况,提供良好的错误消息和反馈,以便用户能够诊断和解决问题。- 版本控制:采用适当的版本控制策略,管理库的更新和发布,确保向后兼容性和升级路径清晰。
2024-07-11 15:49:33
369
原创 单例及工厂模式适合的场景
3. **降低耦合度**:工厂模式可以降低系统中各个类之间的耦合度,客户端只与工厂接口交互,而不直接与具体产品类交互,从而更容易扩展和维护系统。1. **对象的创建与使用分离**:工厂模式可以将对象的创建和使用分离,客户端只需要通过工厂来创建对象,而无需关心对象的具体实现细节。5. **多态性应用**:工厂模式可以利用多态性,通过工厂返回的抽象类型来处理不同类型的对象,从而实现灵活的对象创建和使用。2. **全局访问点**:单例模式可以提供一个全局访问点,使得系统中的其他对象可以方便地访问单例实例。
2024-06-18 15:36:21
638
原创 Lua与Python区别
Python的运行速度通常比Lua慢,因为它是一种更高层的语言,包含了更多的抽象和动态特性。- Lua和Python都支持多种操作系统和平台,但Python更常用于桌面和服务器应用程序,而Lua更常用于嵌入式和移动应用程序。- Python被设计为一种更通用的编程语言,它有一个庞大的标准库,支持多种编程范式,如面向对象、过程式和函数式编程。- Python有一个非常庞大和活跃的社区,提供了大量的库和工具,可以帮助开发者快速开发应用程序。- Lua有一个活跃的社区,但它的库和资源不如Python丰富。
2024-03-30 23:36:45
2138
原创 MySQL与SQLite区别
MySQL:支持多种存储引擎,如InnoDB、MyISAM、Memory等,每种存储引擎都有不同的特性,如事务支持、索引类型、数据存储方式等。1. 企业级应用:MySQL因其强大的功能、性能和可扩展性,常用于企业级应用,包括电子商务、在线支付、社交网络等。2. 桌面和移动应用:SQLite可以嵌入到桌面和移动应用中,用于本地数据存储和查询。3. 开发和测试:由于其简单的安装和易于使用的特性,SQLite常用于开发和测试环境。- SQLite:支持外键约束,但它的实现与MySQL不同,并且不支持触发器。
2024-03-30 20:38:14
3162
原创 推荐看一下开源项目源码(C++进阶)
7. RapidJSON RapidJSON是一个快速的JSON解析器和生成器库,其源码中包含了大量的C++代码,可以学习到如何使用C++进行高效的字符串操作和内存管理。8. libevent libevent是一个高性能的C/C++事件循环库,其源码中包含了大量的C++代码,可以学习到如何使用C++进行网络编程和事件驱动编程。3. MySQL MySQL是一个流行的开源关系型数据库管理系统,其源码中包含了大量的C++代码,可以学习到如何使用C++进行高性能的内存管理和网络编程。
2024-03-30 11:43:18
469
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅