自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(104)
  • 收藏
  • 关注

原创 数据结构---B树

每个节点最多有 *M* 个子节点(其中M是B树的阶数)。每个节点至少有 ⌈*M*/2⌉ 个子节点(除了根节点,根节点至少有2个子节点,除非它是叶子节点)。所有叶子节点都在同一层,即B树是平衡的。每个节点最多有 *M*−1 个键值。每个节点的键值按升序排列。根节点至少有2个子节点(除非它是叶子节点)。

2025-06-15 16:48:25 625

原创 单例模式的好处

唯一性:某些资源在整个应用程序中只需要一个实例,例如日志记录器、配置管理器、数据库连接池等。单例模式可以确保这些资源的唯一性,避免重复创建和管理。全局访问:单例模式提供了一个全局访问点,方便在程序的任何地方访问该实例,而无需通过复杂的依赖注入或传递对象引用。

2025-06-15 16:13:55 132

原创 把Cmakelist.txt转化为Qt Pro文件的方法

问题:在拿到别人的Qt项目时,打开项目其中只有CMakeList.txt文件,而不是熟悉的.pro文件,于是想着如何根据CMakeList.txt生成.pro文件。会生成一个*.pro文件,可以直接使用QT打开,一般情况下比使用QT直接打开cmakelist载入的信息全面。有些工程载入pro文件反而丧失了信息,载入camkelist却能保证程序配置结构,暂时还没有找到原因所在。cd到cmakelist文件夹下,建议两种方法都尝试一下。

2025-06-15 15:41:25 125

原创 使用MFC中的CEvent实现两个线程之间的交替打印

程序说明:上述定义了两个CEvent 变量g_EventA和g_EventB,g_EventA初始化为有信号,g_EventB初始化为没有信号,这样就可以实现A先打印,然后在FuncB函数中调用WaitForSingleObject函数等待g_EventB有信号,只有在FuncA函数执行设置g_EventB有信号后,FuncB才打印。问题要求如下:请写出一个多线程程序,要求打印效果如下:A:0,B:0、A:1,B:1…A:99,B:99?

2025-06-09 23:24:42 344

原创 数据结构---红黑树

红黑树是一种自平衡的二叉查找树,它在每一个节点上增加另一个存储位来表示节点的颜色,可以是红色或者黑色。通过这些颜色的约束,红黑树能够保证从根到叶子节点的最长路径不会超过最短路径的两倍,从而保持大致的平衡。

2025-06-08 12:25:55 474

原创 归并排序算法

归并排序(Merge Sort)是一种经典的分治算法,其核心思想是将一个复杂问题分解为多个相对简单的子问题,分别解决这些子问题,然后再将子问题的解合并为原问题的解。

2025-06-07 11:46:41 618

原创 C++中新式类型转换static_cast、const_cast、dynamic_cast、reinterpret_cast

用于有明确类型关系的转换,安全且高效。:用于继承体系中的向下转型,依赖RTTI,运行时检查。const_cast:用于修改变量的const或volatile属性,需谨慎使用。:用于低级别的类型转换,需谨慎使用,可能导致未定义行为。在实际编程中,应尽量避免使用和const_cast,优先使用和,以确保类型安全和代码的可读性。

2025-06-01 11:58:07 443

原创 Qt SQL模块基础

官方帮助文档中的Qt支持的数据库驱动如下图:Qt SQL 模块中提供了一些常见的数据库驱动,包括网络型数据库,如Qracle、MS SQL Server、MySQL等,也包括简单的单机型数据库。

2025-05-31 16:04:05 468

原创 Qt中的智能指针

Qt中提供了多种智能指针,用于管理自动分配的内存,避免内存泄漏和悬挂指针的问题。

2025-05-27 23:07:04 1037

原创 C++项目中调用C#DLL的的方式

在C++中调用C#编写的DLL,通常需要借助COM(Component Object Model)技术或者通过C++/CLI(C++托管扩展)来实现。

2025-05-26 23:17:31 573

原创 C++11异步编程 --- async

std::asyncstd::async是一个函数模板,用于启动一个异步任务。它返回一个对象,该对象可以用来获取异步任务的结果。std::async的执行方式可以通过策略来控制。future是一个类模板,用于存储异步执行结果,它提供了一种机制,允许用户在某个异步操作完成时获取其结果。对象可以与线程、异步任务或其他并发操作相关联。

2025-05-13 23:21:19 435

原创 Qt中在子线程中刷新UI的方法

在Qt中UI界面并不是线程安全的,意味着在子线程中不能随意操作UI界面组件(比如按钮、标签)等,如果强行操作这些组件有可能会导致程序崩溃。那么在Qt中如何在子线程中刷新UI控件呢?

2025-05-10 23:26:21 913

原创 C++11中的移动语义

特性移动语义传统拷贝语义资源处理所有权转移(无深拷贝)深拷贝性能O(1)(高效)O(n)(可能低效)适用场景临时对象、大型资源类、容器操作不可复制资源的小型对象关键字std::move&&noexceptconst&、拷贝构造函数最佳实践为资源管理类实现移动语义。使用std::move显式转移资源。将移动操作标记为noexcept。避免在移动后访问被移动的对象。参考文章:1.透彻理解C++11 移动语义:右值、右值引用、std::move、std::forward2.

2025-04-12 16:40:34 958

原创 C++11中的左值、右值、左值引用、右值引用

类型可以绑定到示例左值(Lvalue)左值int a = 10;右值(Rvalue)右值左值引用(Lvalue Reference)左值右值引用(Rvalue Reference)右值。

2025-04-12 11:54:25 520

原创 Qt中自定义插件和库(1)

在Qt中创建一个新的类,继承自QWidget或其他Qt控件类。例如,创建一个自定义的电池UI控件TBattery,继承自QWidget。在该类的头文件中,使用Q_OBJECT宏声明该类为一个Qt对象。在类的实现文件中,重写paintEvent等事件处理函数,实现自定义的绘制逻辑。

2025-04-08 21:57:26 882

原创 使用QAction编辑器添加QAction到ui里

通过 Action Editor,可以完全可视化地管理。,无需手动编写创建和布局代码,大幅提升开发效率!:Qt 会自动连接命名规范的槽函数(无需手动。,无需手动编写代码。文件后,Qt 会自动生成。

2025-04-05 16:59:52 638

原创 在QWidget中如何添加QAction

可以通过以下步骤实现。),但也可以直接关联到。

2025-04-05 16:48:35 285

原创 Qt中左侧项目菜单中构建设置功能中的构建步骤是怎么回事

构建步骤(Build Steps)**是控制项目如何编译、链接和生成最终产物的核心配置区域。它允许你自定义编译过程中的各个阶段(如。在 Qt Creator 中,**构建设置(Build Settings)通过合理配置构建步骤,可以显著提升开发效率并避免常见的编译问题。等命令的具体行为)。

2025-04-05 15:29:35 459

原创 在Qt中直接在构建目录下直接运行.exe文件报错问题分析

在学习Qt的过程中遇到过一个问题,直接在Qt构建目录下运行生成的.exe文件时会报错。这和MFC有一定的差别,如果MFC是可以直接运行的。| 如果使用 MSVC 编译 |已放置在正确的位置。否则会出现程序无法启动或报错(如。文件(Windows 平台)时,需要确保以下。| Windows 平台插件 |Qt 提供了 windeployqt。在 Qt 中直接运行构建目录下的。(Windows 平台插件)2.其他可能需要的插件(如。自动部署,避免遗漏依赖项!它会自动复制所有需要的。

2025-04-02 20:21:08 1153

原创 vecto容器的emplace_back函数对比push_back函数

emplace 相比 push_back 的主要优势在于减少了不必要的拷贝或移动操作,从而提高了性能和效率。此外,emplace 的灵活性更高,适用于更广泛的场景,尤其是在处理复杂对象和资源管理类时。然而,push_back 也有其优势,例如代码可读性更高(因为它直接传递对象),在某些简单场景下也完全适用。在实际使用中,可以根据具体需求选择合适的方法。

2025-03-30 15:07:05 443

原创 MFC中CMap类的用法和原理

CMap 是一个模板类,需要指定键类型、键的参数类型、值类型和值的参数类型。例如:下面展示一些内联代码片。// 键为 int,值为 CString// 哈希表大小为 101。

2025-03-30 14:11:38 557

原创 C++11中智能指针的使用(shared_ptr、unique_ptr、weak_ptr)

如果需要对对象进行特殊处理(如释放资源或调用特定函数),可以为。

2025-03-24 23:38:52 896

原创 如何在Win32编程中实现多线程同步?

在Win32编程中,多线程同步可以通过多种机制实现,包括临界区、互斥量、信号量和事件。临界区:适用于同一进程内的线程同步。互斥量:适用于跨进程的线程同步。信号量:适用于控制对多个资源的访问。事件:适用于线程间的通信和同步。通过合理选择和使用这些同步机制,可以确保多线程程序的正确性和稳定性。句柄。

2025-03-22 11:46:59 608

原创 VC++中终止线程的方式

在MFC中,可以使用事件对象(如CEvent)来通知线程终止。线程可以在运行过程中定期检查事件是否被触发,如果是,则安全地退出。

2025-03-22 10:09:41 265

原创 unique_ptr中reset()函数的用法

如果。

2025-03-15 12:15:08 563

原创 钻石继承(Diamond Inheritance)问题是什么?如何解决?

钻石继承问题主要出现在多重继承场景中,通过虚继承、显式指定访问路径或避免多重继承等方法可以有效解决。

2025-03-15 10:24:07 410

原创 C++中虚析构函数的作用是什么?为什么基类需要虚析构函数?

虚析构函数的作用是确保在通过基类指针或引用删除派生类对象时,能够正确调用派生类的析构函数,从而避免资源泄漏和未定义行为。如果基类中定义了虚函数,那么基类的析构函数也应该声明为虚的,以支持多态的正确析构。

2025-03-15 00:05:33 524

原创 C++中通过虚函数实现多态的原理

虚函数是在基类中使用。

2025-03-14 23:47:45 361

原创 C++ 中的RAII(资源获取及初始化)

RAII是C++中一种非常重要的资源管理机制,通过将资源的生命周期与对象的生命周期绑定,能够有效避免资源管理中的错误。它在现代C++编程中被广泛应用,尤其是在智能指针、文件操作和线程同步等领域。合理使用RAII可以提高代码的安全性和可维护性。

2025-03-10 23:48:50 430

原创 Qt 元对象系统

Qt元对象系统(Meta-Object System)是Qt框架的核心特性之一,它为C++语言提供了运行时反射、信号与槽机制、动态属性系统等功能。

2025-03-09 21:06:46 975

原创 C++11使用mutex和condition_variable实现线程同步

C++中A、B、C三个线程模拟购买100张车票,A输出99,B输出98,C输出97,然后又循环A输出96,B95,C94,直到0,使用线程同步,如何实现?这是一种按顺序执行线程的问题,应该实现?

2025-03-09 19:47:10 290

原创 C++11中的Condition_variable

在C++11中,条件变量()是线程同步机制之一,用于在多线程环境中实现线程间的通信和协调。它允许一个或多个线程在某个条件尚未满足时等待,直到其他线程通知条件已经满足。条件变量通常与互斥锁(std::mutex)一起使用,以确保线程安全。

2025-03-09 19:45:41 348

原创 C++11中atomic

是C++中实现线程安全和原子操作的重要工具。它不仅能够保证操作的原子性,还可以通过内存序控制解决复杂的多线程同步问题。在设计多线程程序时,合理使用可以提高代码的效率和可维护性。

2025-03-05 23:49:08 440

原创 MFC中CMutex类和CSingleLock类,配合使用疑惑

在MFC中,虽然CMutex类本身可以实现线程同步,但通常会与CSingleLock类一起使用,主要原因在于CSingleLock提供了更灵活和安全的同步机制,以下是具体原因:

2025-03-02 16:05:48 360

原创 Qt中的事件模型

在Qt 中事件是通过QEvent和其子类来表示的,QEvent是一个抽象基类,定义了事件的基本结构,而具体的事件类型(如鼠标事件、键盘事件、定时器事件等),则通过继承QEvent来实现。例如:QMouseEvent:鼠标事件。QKeyEvent:键盘事件。QResizeEvent:表示窗口大小改变事件。QTimerEvent:表示定时器事件。

2025-03-02 15:37:23 983

原创 Qt 中signals和slots、Q_SIGNAL和Q_LOT、Q_SIGNALS和Q_SLOTS的区别和使用

信号和槽函数需要在类的声明中明确声明。信号需要使用signals关键字,而槽函数可以使用slots关键字(虽然在现代Qt中,槽函数也可以直接作为普通成员函数声明,但使用slots关键字更清晰)。

2025-03-01 18:35:18 1462

原创 Qt中如果槽函数运行时间久,避免阻塞主线程的做法

Q_OBJECTpublic:signals:// 模拟耗时任务i < 10;++i)// 模拟耗时操作。

2025-03-01 18:16:04 1249

原创 Qt中的核心机制--信号与槽

在类中可以自己定义信号,信号就是在类定义里声明一个函数,但是这个函数无需实现,只需发射(emit)。例如:// 发射信号。

2025-03-01 16:20:02 940

原创 C++中tuple的用法

std::tuple是 C++ 中一个非常灵活的工具,适用于存储一组不同类型的值。它支持多种操作,包括访问、修改、解包、比较和与函数结合使用。通过std::tuple,可以更方便地处理复杂的数据结构,尤其是在函数返回多个值或需要传递一组不同类型参数时。说明:以上文章由Kimi生成,tuple在C++11中引入,具体可以看下《C++ Primer》一书。

2025-02-24 23:21:45 568

原创 C# WinForm 中的事件驱动模型

WinForm 的事件驱动模型是基于事件和事件处理程序的编程范式。通过将事件处理程序绑定到控件的事件上,应用程序可以响应用户的操作和其他系统事件。事件委托是实现事件机制的核心,而事件的多播特性使得多个处理程序可以绑定到同一个事件上。WinForm 应用程序通过事件和事件处理程序来响应用户的交互操作(如点击按钮、输入文本等),从而实现动态交互。这些事件会触发相应的事件处理程序(即事件处理器),从而执行特定的代码逻辑。C# 的事件支持多播委托,即可以将多个事件处理程序绑定到同一个事件上。操作符将事件处理程序(

2025-02-23 15:00:28 1239

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除