自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 QT的QVariant关键字使用

摘要:QVariant是Qt框架中的通用数据类型容器,能够存储多种数据类型(如int、double、QString等)并通过toType()方法进行类型转换。它支持与QMap结合构建键值对容器,也能作为QVariantList/QVariantMap使用。示例展示了如何存储基本类型、QColor对象,以及进行类型判断和转换。特别适用于需要处理异构数据的场景,但需注意其对枚举和自定义类型的特殊处理要求。

2025-07-09 10:03:47 377

原创 QT窗口布局

Qt窗口布局提供了水平、垂直和网格三种样式,能够动态调整子控件位置以适应窗口大小变化,避免固定坐标导致的显示问题。布局可以无限嵌套,满足复杂界面设计需求。使用弹簧(水平/垂直)可实现控件对齐和间距调整,其中Expanding类型弹簧最常用。所有窗口都应设置布局,否则可能导致子控件无法显示。通过合理运用布局和弹簧,可以创建美观且自适应的GUI界面。

2025-07-08 11:07:16 392

原创 QT多线程的实现方式

四种多线程实现方式:1)继承QThread类重写run()方法;2)使用moveToThread将QObject对象移至子线程;3)使用QRunnable和QThreadPool线程池;4)使用QtConcurrent高级API。文章比较了各种方法的优缺点,重点说明了线程同步机制、线程间通信以及任务管理技术要点,并提供了代码示例。

2025-07-08 10:41:48 1112

原创 QT的事件过滤器eventFilter

Qt事件过滤器机制允许对象拦截处理其他对象的事件。通过installEventFilter()安装过滤器,在监视对象中重写eventFilter()进行事件处理,返回true拦截事件或false继续传递。事件传递时先执行过滤器再到达目标对象,多个过滤器按逆序执行。使用后可通过removeEventFilter()移除。

2025-07-07 15:16:40 254

原创 github删除不想要的仓库项目

按钮后,进入项目设置界面,直接划到最底部,点击delete this repository。1.第一步,点击项目地址进去,点击settings。3.第三步,在弹出的界面中输入自己的项目地址名。

2025-06-20 10:00:42 262

原创 【无标题】

Qt智能指针QSharedPointer 与 C++中的std::shared_ptr其作用是一样的,其应用范围比我们前面说到的QPointer和QScopedPointer更广。

2025-06-04 10:53:07 409

原创 qt的智能指针

Qt智能指针机制解析:1. QPointer是Qt提供的弱指针,当指向的QObject对象被删除时会自动置空,避免野指针问题;2. QScopedPointer用于作用域内自动管理对象生命周期,出作用域自动释放,但不能作为返回值;3. QSharedPointer采用引用计数机制,支持跨函数传递,其引用计数操作是线程安全的,但指向的资源仍需单独保护。三种智能指针各具特点:QPointer专用于QObject对象跟踪,QScopedPointer适合局部资源管理,QSharedPointer则适用于需要共享所

2025-06-04 10:43:06 372

原创 1.设计师界面进行ui设计

在QWidget窗口中,设计了一个网格布局,确保文本框、按钮、标签等控件能够一一对应排列。文本框设置为只读模式,通过修改readonly属性禁止手动输入。标签控件进行了功能提升,以增强其显示效果。此外,为窗口整体添加了样式表,进一步优化了界面外观。最终实现的窗口布局清晰,控件功能明确,界面风格统一

2025-05-21 10:20:03 172

原创 QT的自定义控件

在Qt开发中,可以通过提升控件来扩展其功能。例如,将QLabel控件提升为自定义的QPaintPointLabel类。

2025-05-21 09:31:01 397

原创 VS打断点调试,无法命中断点或断点失效,解决方法

在调试C/C++程序时,正确配置项目属性是确保调试信息准确生成的关键。首先,打开需要打断点的模块,进入属性设置,将C/C++常规中的调试信息格式改为“程序数据库(/Zi)”,以便生成更详细的调试信息。

2025-05-13 16:08:33 998 1

原创 VS无法命中断点调试

在vs里边,工具 ——> 选项 ——> 调试 ——> 常规,然后取消【启用“仅我的代码”】和【要求源文件与原始版本完全匹配】前面的勾即可。我们在用vs进行debug时,有的时候会出现无法打断点单调试,提示当前不会命中断点,还没有为该文档加载任何符号。

2025-04-14 15:37:04 394

原创 VS2019密钥

Visual Studio 2019 Enterprise(企业版):BF8Y8-GN2QH-T84XB-QVY3B-RC4DFVisual Studio 2019 Professional(专业版):NYWVH-HT4XC-R2WYW-9Y3CM-X4V3Y

2025-03-31 15:12:26 8848

原创 VS2019+Mitk+cmake编译运行MitkWorkbench

3.localep(压缩包在线获取,记得挂梯子)cmake双层编译,然后在vs中生成。1.github拿到源码mitk。2.建同级文件(防止污染)

2025-02-19 15:55:01 244

原创 VS无法补全代码(以C++为例)

2.打开文本编辑器,C/C++里面的高级。将禁用IntelliSense改成False,就有代码提示了。1.点击工具,打开选项。

2025-02-19 15:14:58 234

原创 VS2019+Qt5出现error: C2001: 常量中有换行符

在中文末尾加一个空格,让最后一个中文汉字与双引号隔开。

2025-02-17 16:15:55 209

转载 VS2019出现“有太多的错误导致IntelliSense引擎无法正常工作,其中有些错误无法在编辑其中查看”的问题解决方法

最近做项目使用VS2019时,在工程文件的开头出现一个错误 “有太多的错误导致IntelliSense引擎无法正常工作,其中有些错误无法在编辑其中查看”,如下图所示。

2025-02-17 15:11:47 273

原创 UI样式表(悬停hover状态样式和按下pressed)

按下状态:文本被压下去的动态效果。,背景色,边框,边角,文本颜色。悬停状态:浅蓝色,其他的不变。

2025-01-20 15:35:10 352

原创 VS中出现C2001 常量中有换行符

2.多个文件出现这类问题,可以将项目文件夹压缩,然后打开Windows设置里的时间和语言,将如图去掉勾选,然后再将压缩包解压,重新编译即可。1.对于少量文件出现常量中有换行符问题,单个文件通过Notepad++打开,将编码改成ANSI编码。

2025-01-20 14:07:49 512

原创 vs有中文乱码

1.少许文件乱码,可以通过nodepad++打开编码栏改成成ansi码,保存后vs重新编译文件。对于win10,点击设置-》时间和语言-》语言-》右上角管理语言设置-》更改系统区域设置。2.微软自带的是uft-8,可以在编译之前,确定windows系统的勾选去掉。

2025-01-15 18:53:03 331

原创 cmake gui与VS的使用

如果没有安装,可以从CMake官网下载并安装。如果在配置过程中 CMake 找不到某些库或依赖项,可以通过在 cmake-gui 中添加 CMake 变量来手动指定路径或标志。这样,你就可以使用 cmake-gui 为 Visual Studio 生成项目,并在 Visual Studio 中进行开发了。如果配置成功并且没有错误,点击 Generate 按钮,CMake 将开始生成 Visual Studio 项目文件。在其他操作系统上,你可以通过命令行启动 cmake-gui,如果 GUI 组件已安装。

2025-01-06 00:13:34 623

原创 git的安装看一篇就够了

2.根据上面的官方链接进入git官网,点击download。9.最后切换到桌面,右击鼠标,看到一下图标显示安装成功。1.查看电脑操作系统,对应下载相应的git安装包。3.因为我电脑是64位,下载对应的64位。4.git下载完,准备安装,点击next。8.安装成功,显示这个界面,点击完成。注:git下载官网:​​​​​​。7.接下来都是默认下一步next。6.默认下一步,next。

2025-01-05 23:44:39 306

原创 VS2022调试(官方)

断点指示 Visual Studio 应在哪个位置挂起你的运行代码,以使你可以查看变量的值或内存的行为,或确定代码的分支是否运行。变量上设置好了监视,当你在调试器中移动时,可看到其值发生变化。例如,你可将断点插入到指定的函数中,使用“运行到光标处”推进调试器,然后检查源代码。大多数情况下,我们使用键盘快捷方式,因为这是在调试器中快速执行应用的好方法(括号中显示了等效的命令,如菜单命令)。通常情况下,在调试时,需要快速检查变量的属性值,以查看它们是否存储了你希望它们存储的值,可根据数据提示执行此操作。

2025-01-04 10:22:46 2145

原创 QT中MVC框架

是应用程序的可视化部分,负责展示数据,将Model维护的数据进行可视化呈现,并提供用户操作界面。是应用程序的数据模型部分,负责管理应用程序的数据,提供对数据的增删改查等操作。它是应用程序的核心部分,并与数据源进行通信,为架构中的其他组件(如视图和委托)提供了接口。是应用程序的控制器部分,负责接收和处理View层的用户操作并作出响应,同时还管理Model和View之间的通讯。它是Model和View之间的桥梁。,它通过将应用程序的业务逻辑、数据展示和用户交互分离开来,显著提高了代码的可维护性和可扩展性。

2024-12-30 18:50:41 316

原创 CustomPlot的使用步骤

(1)文件添加,网上下载customplot的c文件和h文件,放入同级文件夹里。(3)打开项目中,项目中添加以下文件。添加方式“右键”导入。(4)头文件包含customplot.h。然后可以根据自己的需求进行功能开发。(2)pro文件中加入以下程序。

2024-12-30 10:12:27 275

原创 函数传递(值传递、指针传递、引用传递)

在C++中,有三种主要的函数参数传递方式:值传递、指针传递和引用传递。当我们将一个值传递给函数时,函数会创建该值的副本,并在函数内部使用这个副本。这是因为引用传递允许函数直接访问和修改原始值,使得代码更加简洁和易读。这是因为在值传递中,函数会创建参数的副本,而不是直接修改原始值。函数可以通过引用直接访问和修改原始值,而无需创建副本。在函数内部,我们可以直接修改原始值,而无需使用指针或副本。在函数内部,我们通过解引用指针来修改原始值。1.当函数需要修改原始值时,指针传递是一个不错的选择。

2024-10-15 15:55:42 556

原创 线程同步方式

线程同步是指协调多个线程的执行顺序以及访问共享资源的方式,以避免出现竞争条件(Race Condition)和数据不一致性等问题。- 互斥锁是最常用的线程同步机制之一,通过对共享资源加锁来确保同时只有一个线程可以访问共享资源。- 信号量是一种更广泛的线程同步工具,除了互斥作用外,还可以控制多个线程同时访问共享资源的数量。- 信号量可以是计数信号量(允许多个线程同时访问)或二进制信号量(只允许一个线程访问)。- 通常与互斥锁一起使用,等待线程在检查条件时会释放锁,当条件满足时,唤醒等待线程。

2024-03-05 13:56:03 512

原创 虚函数和纯虚函数

在 C++ 中,虚函数(Virtual Function)和纯虚函数(Pure Virtual Function)是面向对象编程中的重要概念,用于实现多态性和抽象类。- 包含纯虚函数的类称为抽象类(Abstract Class),不能被实例化,只能作为基类来派生其他类。- 虚函数是在基类中声明为虚拟的成员函数,可以被子类重写。- 纯虚函数是在基类中声明为纯虚拟的虚函数,没有具体的实现,在基类中只有声明,不需要定义函数体。- 使用纯虚函数可以定义抽象接口,强制派生类实现特定的函数,实现接口的统一规范。

2024-03-05 13:33:01 281

原创 C++之析构函数

在 C++ 中,析构函数(Destructor)是一个特殊的成员函数,用于在对象生命周期结束时执行清理工作和资源释放。析构函数的名称与类名相同,前面加上波浪号(~),不接受任何参数,也没有返回类型。在上面的示例中,当对象 `obj1` 和 `obj2` 超出作用域时,析构函数会被自动调用,输出相应的信息。这样可以确保在对象销毁时进行必要的清理工作,比如释放动态分配的内存、关闭文件等。需要注意的是,C++ 中如果一个类有指针成员或者需要手动管理资源,那么最好显式地定义析构函数来确保资源的正确释放。

2024-03-05 13:16:49 312

原创 ab二个字段都有索引,会导致索引失效吗?

1. 覆盖索引:如果其中一个索引是覆盖索引(Covering Index),即索引包含了查询所需的所有列,而另一个索引并不包含所有需要的列,数据库可能会选择使用覆盖索引而不使用第二个索引。3. 索引合并:有些数据库系统支持索引合并(Index Merge),即在某些情况下会将多个单列索引合并使用,但并非所有数据库都支持这种特性。当两个字段都有各自的索引时,一般情况下不会导致索引失效。在大多数情况下,如果两个字段都有索引,数据库系统会根据查询条件和统计信息来选择最优的索引来加速查询,而不会导致索引失效。

2024-03-05 13:10:34 421

原创 什么情况下导致索引失效

索引在数据库中起着加快数据检索速度的作用,但在某些情况下,索引可能会失效,即数据库系统无法有效地使用索引来加速查询。- 当查询条件中未使用索引列,或者对索引列进行了函数操作、类型转换等,数据库无法有效使用索引。- 如果索引列上的数据分布不均匀,某些值的重复率很高,数据库可能会放弃使用索引而进行全表扫描。= 等),会导致索引失效。- 当查询条件中的数据类型与索引列的数据类型不匹配时,索引也可能无法被使用。- 在多表连接查询中,如果连接条件的列没有索引,可能会导致索引失效。

2024-03-05 13:06:44 1044

原创 聚集索引和非聚集索引区别

总的来说,聚集索引将数据行存储在索引的叶子节点中,减少了数据检索时的IO操作,可以提高查询性能;而非聚集索引只存储索引值和指向数据行的指针,需要额外的IO操作来获取数据行,但可以加速多种不同列的查询。- 聚集索引的叶子节点存储了表中的实际数据行,而不只是索引值。换句话说,表的物理顺序和聚集索引的顺序是一致的。- 非聚集索引的叶子节点存储的是索引字段的值以及指向实际数据行的指针。即索引值和数据行是分开存储的。- 当按照聚集索引的列进行查询时,数据库引擎会按照索引的顺序直接定位到数据行,提高查询效率。

2024-03-05 12:59:00 694

原创 MySQL主键索引的特点

3. **默认聚集索引**:在 InnoDB 存储引擎中,主键索引默认是聚集索引。5. **隐式约束**:主键索引在逻辑上也是一种约束,确保数据的完整性和一致性。7. **自动生成**:主键可以手动指定也可以自动生成。1. **唯一性**:主键索引要求列的值必须是唯一的,即该索引列中的每个值必须是唯一的,不允许重复值出现。4. **快速查找**:通过主键索引可以快速定位到表中唯一的一条记录,加快数据检索的速度。2. **非空性**:主键索引列的值不能为 NULL,确保每行数据都有一个唯一的标诋符。

2024-03-05 12:50:59 316

原创 与缓存相关的状态码

当客户端向服务器发送带有条件的 GET 请求(通常是包含 If-Modified-Since 或 If-None-Match 头部的请求),并且资源未发生变化时,服务器会返回状态码 304 Not Modified。这表示客户端缓存的版本仍然有效,无需重新获取资源,可以直接使用缓存。在缓存相关的情境下,404 状态码表示客户端缓存中的资源已经过期或不存在,需要从服务器重新获取。这些状态码是与缓存相关的一些常见情况,在处理缓存时需要根据不同的状态码来决定是否使用缓存、更新缓存或者从服务器重新获取资源。

2024-03-05 12:48:55 556

原创 http状态码,302,400

状态码 400 表示客户端发出的请求有错误,服务器无法理解。这通常是由于客户端发送的请求中包含无效的请求参数、格式不正确等问题导致的。客户端收到 400 状态码后,应该检查请求的格式和内容,进行修正后重新发送请求。服务器返回状态码 302 时,意味着所请求的资源已经被临时移动到另一个位置。客户端接收到该状态码后,会根据响应头中的 Location 字段指定的新 URL 发起新的请求。HTTP 状态码是指在 HTTP 协议通信过程中,服务器向客户端返回的状态码,用于表示服务器对请求的处理结果。

2024-03-05 12:39:57 1056

原创 四次挥手的过程,为什么有timewait

4. 主动关闭方收到 FIN 报文后,发送 ACK 报文作为确认,进入 TIME_WAIT 状态。在这个状态下,主动关闭方等待 2MSL(Maximum Segment Lifetime) 的时间,确保最后一个 ACK 报文已经到达对端,防止对端没有收到 ACK 报文导致重传。TIME_WAIT 状态的存在是为了确保在网络中已经传输完成的最后一个 ACK 报文不会丢失,同时也为了防止之前的报文再次出现在网络中而引发混乱。1. 主动关闭方发送 FIN 报文给被动关闭方,进入 FIN_WAIT_1 状态。

2024-03-05 12:30:28 257

原创 快排是否稳定,为什么不稳定?

具体来说,当选择枢轴元素时,如果是不稳定的选择方式(例如选择第一个或最后一个元素作为枢轴),那么在分区的过程中,相同元素的相对位置可能会被打乱。另外,如果在分区过程中采用了不稳定的交换策略(比如直接交换而不是插入到合适位置),也会导致快速排序的不稳定性。快速排序(Quicksort)是一种不稳定的排序算法。其不稳定性主要来自在分区过程中对元素的交换操作。在快速排序的过程中,相同元素的相对位置可能会发生变化,导致最终排序结果中相同元素的顺序与初始顺序不同。

2024-03-05 12:28:16 1449

原创 常见的排序算法

具体来说,假设长度为n的数组arr,要按照从小到大排序,那么先从n个数字中找到最小值min1,如果最小值min1的位置不在数组的最左端(也就是min1不等于arr[0]),则将最小值min1和arr[0]交换,接着在剩下的n-1个数字中找到最小值min2,如果最小值min2不等于arr[1],则交换这两个数字,依次类推,直到数组arr有序排列。例如要将数组arr=[4,2,8,0,5,1]排序,可以将4看做是一个有序序列(图中用蓝色标出),将[2,8,0,5,1]看做一个无序序列。最简单的一种排序算法。

2024-03-05 12:21:29 381

原创 model view模型

模型/视图结构,仍然分离了数据与呈现给用户的方式,但提供了基于相同原理的简单框架。这种分离使得它可以在几个不同的视图中显示相同的数据,并且实现新类型的视图,而无需改变底层的数据结构。为了灵活地处理用户输入,则引入了委托的概念。在此框架引入委托的优点是:它允许项目数据显示和自定义编辑。模型与数据源进行通信,在这个体系结构中为其它组件提供了一个接口。通信的性质依赖于数据源的类型以及模型的实现方式。视图从模型中得到模型索引,这些都引用到数据项。通过为模型提供模型索引,视图可以从数据源中检索数据项。

2024-03-05 11:55:14 936

原创 Linux常见命令

注意:常用 rm –rf XXX,千万不能执行rm –rf / ,否则它会把你的系统文件全部删除,非常危险!tail还有一个重要的作用是用来显示文件中,实时新增的内容,方法如下:tail -f xxx。路径的写法一定由根目录 ‘/’写起,例如/usr/local/net-snmp.常用选项:-r 递归,复制子文件和子目录,一般用在复制目录。选项来查看帮助,例如:ls --help。常用选项:-b 显示行号,空白行不显示行号。搜索系统命令的命令,查找二进制命令,源文件和帮助文档的命令。

2024-02-29 14:02:14 910

原创 C++内存四区

的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。全局区还包含了常量区, 字符串常量和其他常量就是存放在常量区的。代码区用于存放二进制的 CPU 执行的机器指令。的,使其只读的原因是防止程序意外地修改了它的指令。该区域的数据在程序结束后由操作系统释放.C++程序在执行时,将内存大方向划分为。系统分为两个区域:代码区和全局区。在程序编译后,会生成可执行程序,不同区域存放的数据,赋予不同的。全局变量和静态变量存放在此。, 给我们更大的灵活编程。

2024-02-28 16:05:28 287

空空如也

空空如也

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

TA关注的人

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