
C++
文章平均质量分 71
sanqima
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
VS2005里的快捷键
摘要:VS2005不支持C++11标准,因此也不支持智能指针功能。微软Visual Studio对C++11的支持是逐步完善的,直到VS2015 update3才完全支持。文章还列出了VS2005中常用的快捷键,包括查看函数定义(F12)、函数声明(Ctrl+F12)、列选择(Shift+Alt+鼠标左键)、代码折叠(Ctrl+M+M)等操作快捷键,这些快捷键能显著提高开发效率。原创 2025-08-17 08:07:42 · 157 阅读 · 0 评论 -
使用“桥接模式“,实现跨平台绘图或多类型消息发送机制
本文介绍了桥接设计模式及其两种C++实现场景。桥接模式通过将抽象部分与实现部分分离,使它们能独立变化。案例1展示了跨平台绘图系统,Shape抽象类与DrawingAPI实现类解耦,支持不同平台绘制不同形状。案例2实现了多类型消息系统,Message抽象类与MessageSender实现类分离,支持组合不同消息类型和发送方式。桥接模式核心价值在于:1)抽象与实现解耦;2)灵活组合功能;3)符合开闭原则,便于扩展。两个案例均通过构造函数注入实现类,展示了桥接模式的实际应用。原创 2025-07-20 16:43:22 · 434 阅读 · 0 评论 -
在C++里如何避免栈内存溢出
C++编程中栈内存有限,栈溢出通常由递归过深或局部变量过大导致。本文提出6种解决方法:1)用迭代或尾递归替代普通递归;2)使用堆内存或STL容器管理大型数据;3)优化数据结构,避免栈上创建大对象;4)谨慎调整栈空间限制;5)通过静态分析和深度限制预防风险;6)确保递归终止条件正确。核心建议是优先优化代码结构,合理分配内存资源,避免过度依赖栈空间。原创 2025-07-20 16:28:18 · 504 阅读 · 0 评论 -
判断QMetaObject::invokeMethod()里的函数是否调用成功
本文详细介绍里的invokeMethod()函数的2种调用方式:同步调用、异步调用。只有同步调用,才能根据invokeMethod()的返回值,来判断函数是否执行成功。而异步调用,则需要借助信号槽的方式,在执行完之后,发送一个信号给调用者(或子线程)即可。原创 2025-07-15 22:39:56 · 1076 阅读 · 0 评论 -
常用的串口通信工具MobaXterm、Bus Hound、SScom等
本文介绍了四种PC端串口通信工具的功能和使用方法:MobaXterm支持SSH、FTP、串口等多种协议;Bus Hound用于监控CAN和串口数据;SScom专为串口和网口通信设计;ScriptCommunicator可进行串口通信并绘制波形图。每种工具都有详细的操作步骤图示,包括参数设置、数据监控等关键功能,并提供了官方和个人下载地址。这些工具各有特点,适用于不同的串口通信和数据分析场景。原创 2025-06-25 19:58:07 · 1212 阅读 · 0 评论 -
FitCode里的快捷键
本文介绍了Copilot的常用快捷键及功能:TAB键可接受所有补全建议;Ctrl+方向键可逐行或逐词接受建议;Ctrl+Alt组合键支持聊天(C)、编辑代码(E)和生成代码(G);Alt+X可将选中代码加入对话。这些快捷键能显著提升编程效率,覆盖代码补全、编辑和交互等场景。原创 2025-06-11 07:53:31 · 138 阅读 · 0 评论 -
QAtomicInt原子变量的CAS(Compare And Swap)写法与优缺点
本文介绍了Qt中原子变量QAtomicInt在多线程编程中的应用,重点解析了无锁队列实现中CAS(Compare-And-Swap)方法的工作原理。通过一个生产者-消费者模型的无锁队列示例,详细说明了put()函数中使用do-while循环配合testAndSetOrdered()方法实现线程安全的原子更新过程。该方法能够确保多线程环境下m_tail变量的同步更新,避免了竞态条件。当多个线程同时尝试修改共享变量时,CAS操作通过比较-交换的原子性保证只有一个线程能成功更新,其他线程会重新读取最新值后重试,原创 2025-05-26 22:33:30 · 1040 阅读 · 0 评论 -
厨师与食客:生产者/消费者模式(基础版)
摘要:该代码实现了一个煎饼摊的生产者-消费者模型,使用Qt框架的多线程机制。系统包含1个厨师线程(生产者)和3个顾客线程(消费者),共享5个托盘缓冲区。通过QMutex和QWaitCondition(方案1)或QSemaphore(方案2)实现同步控制,确保当托盘满时厨师等待,托盘空时顾客等待。厨师每生产一个煎饼需500ms,三个顾客分别以700ms、900ms和1100ms的速度消费。最终共消费20个煎饼后程序终止,验证了多线程同步机制的正确性。原创 2025-05-25 21:40:00 · 172 阅读 · 0 评论 -
解决Visual Studio报“IntelliSense不可用,需设置TRACEDESIGNTIME = true“问题
本文解决了Visual Studio+Qt插件开发中出现的"IntelliSense不可用"问题。主要原因是工程属性中的Qt Version与VS菜单中的不一致。解决方法包括:1) 将工程属性的Qt Installation修改为与VS菜单一致的msvc201764版本;2) 通过开发者命令提示符设置TRACEDESIGNTIME环境变量为true;3) 重启VS软件。该方案适用于从其他电脑迁移项目时出现的版本不一致问题。原创 2025-05-25 20:52:37 · 785 阅读 · 0 评论 -
常用高压缩率的视频容器格式,并进行大比例压缩
常用的高压缩率视频容器格式,包括*.mp4 、*.mkv、*.webM等。容器格式本身并不直接决定压缩率,而是取决于容器中所使用的视频编码格式等因素。这里以700MB视频文件压缩为90MB文件,但清晰度保持不变,进行说明。原创 2025-02-22 22:07:44 · 1196 阅读 · 0 评论 -
解决“QString的split()函数分割中文“报错
在使用Qt平台的QString类里的split()函数,分割.txt文件里中文的字符串时,发现中文会乱码。问题原因:中文使用UTF-16编码。解决方法:将.txt文件保存为UTF-16编码,然后使用split()去分割对应的字符串即可。即将要解析的.txt文件其字符编码,改成UTF-16,比如,UTF-16 LE BOM 或 UTF-16 BE BOM,然后保存即可。原创 2025-02-20 19:38:27 · 426 阅读 · 0 评论 -
解决QPixmap报“QPixmap::grabWindow(): Unable to copy pixels from framebuffer“问题
今天在使用QPixmap::grabWindow()截图时,弹出“QPixmap::grabWindow(): Unable to copy pixels from framebuffer”错误。问题原因:QPixmap::grabWindow()这个函数适用于Qt5版本截屏,该函数在Qt4上表现不稳定,经常出现“Unable to copy pixels from framebuffer”错误。解决方法:建议改成QPixmap::grabWidget()来进行截图。原创 2025-02-13 21:09:24 · 363 阅读 · 0 评论 -
解决QTimer报“Timers cannot be started from another thread“错误
问题原因:QTimer本身不支持跨线程调用。解决方法:QTimer的运行,需要它所在的线程支持事件循环,若没有事件循环,则调用QTimer::start()语句时,会报"Timers cannot be started from another thread"错误,即QTimer失效。所以,要想让QTimer在子线程里正常运行,则需要把该子线程的事件循环开启即可。原创 2025-02-11 23:57:19 · 1972 阅读 · 0 评论 -
解决“SVN无法上传或下载*.so、*.a等二进制文件“问题
今天,在使用Subversion提交代码到服务器时,发现无法提交*.a、*.so等二进制文件,右击这些文件,发现其属性为ignored。问题原因:SVN的配置文件里,屏蔽了*.a、*.so文件的上传与下载,并把这些文件标记了ignores。解决方法:在SVN的配置文件里,去掉*.a、*.so文件的ignores标记,重启电脑即可。原创 2024-12-19 21:13:41 · 844 阅读 · 0 评论 -
解决“https://aka,ms/vs/16/release/channel下载通道清单“问题
有时候,在windows平台安装VS2019时,弹出"https://aka,ms/vs/16/release/channel"错误,出现该问题的原因有很多,比如,原因1:电脑上安装了2个版本的VS2019。解决方法1:把这个2个VS2019全部下载,然后,使用腾讯电脑管家,清理一下注册表,再安装自己想要的VS2019。问题原因2:VS2019的镜像放在aka.ms站点,该站点需要“科学上网”。解决方法2:先在CMD黑框框里ping一下aka.ms地址,获取其IP地址,原创 2024-12-02 00:33:04 · 2060 阅读 · 0 评论 -
解决“ VMware Tools for Windows Vista and later“报错问题
今天,在Win7虚拟机上安装VMware Tools,报"VMware Tools for Windows Vista and later"证书错误,出现该问题的原因是:VMware Tools的版本太高,与当前的虚拟机不兼容。解决方法:在VMware官网,下载一个低版本的VMware Tools.iso文件,然后,在虚拟机的属性页,加载该VMware Tools.iso.iso文件,启动虚拟机之后,手动安装该工具即可。原创 2024-12-01 23:55:44 · 1474 阅读 · 0 评论 -
解决“win7系统无法定位程序输入点 SetDefaultDllDirectories“问题
点击exe,弹出"系统无法定位程序输入点SetDefualtDllDirectories"错误。出现这种情况的原因:当前系统缺少补丁KB253363,或者补丁KB4457144。解决方法:安装这2个补丁中的任何一个,即可修复该问题。所以,。这里以Window7 64位的桌面系统为例,介绍补丁KB4457177的安装方法,其他系统,可以仿照此方法进行操作即可。原创 2024-12-01 23:15:39 · 5253 阅读 · 0 评论 -
解决“Windows锁屏时WiFi自动关闭“问题
在Windows 7电脑A上插上一个USB无线网卡,按快捷键Win+L,给Win7锁屏,等约5分钟,使用实验室里其他的一台电脑B,给电脑A发送ping命令,发现无法ping通。输入密码,按回车键,重新进入电脑A,发现Wifi图标处于"转圈圈",接着,Wifi又自动连接好网络。在Windows系统里,有个开关控制USB无线Wifi的供电,把这个开关禁用,就可以解决"Windows锁屏时Wifi自动关闭"问题。原创 2024-11-14 23:27:58 · 3256 阅读 · 0 评论 -
搭建VisualSVN Server服务器与SVN客户端,下载或提交代码
代码版本管理工具,常见的有Git、SVN这2款。Git在Linux系统上用的比较多,而SVN则在Windows用的比较广泛。当然,这2款软件既有Linux版本,也有Windows版本。下面,介绍SVN的安装方法,SVN包括SVN服务器、SVN客户端。SVN服务器:VisualSVN Server(免费) 或者 Visual SVN(收费)SVN客户端:TortoiseSVN(免费)原创 2024-11-10 16:22:34 · 2531 阅读 · 0 评论 -
LFU算法 初始频率 动态频率
LFU(Least Frequently Used)算法是一种缓存淘汰策略,其核心思想是根据数据的访问频率来决定淘汰哪些数据。具体来说,LFU算法认为如果一个数据在过去一段时间内被访问的次数很少,那么它在未来被再次访问的概率也很低。因此,当缓存空间不足时,LFU算法会选择访问频率最低的数据进行淘汰。在C++中实现LFU算法,通常需要以下几个步骤:数据结构设计:LFU算法通常需要一个哈希表和一个优先队列。哈希表用于存储每个元素的访问计数,键是元素的标识,值是元素的访问次数。原创 2024-10-07 10:21:38 · 953 阅读 · 0 评论 -
解决Qt报“undefined reference to vtable for“错误
今天在Qt工程里添加一个新类OneFunc,点击Qt工具栏的[构建项目]菜单栏时,弹出"undefined reference to vtable for OneFunc"错误。这里以OneFunc新类,添加到Qt工程HelloDesk为例,进行说明。出现该问题的原因,主要有4种:a)该新类没有添加到工程的.pro文件里;b)该新类含有Q_OBJECT宏,没有执行qmake命令;c)该新类的析构函数,缺少virtual关键字修饰;d)该新类的ui, 缺少.moc文件,需要重新moc一下;原创 2024-08-27 19:35:15 · 777 阅读 · 0 评论 -
卸载顽固的驱动或软件
在Windows系统,有些软件或驱动,为了防止被卸载,特地在C:\Windows\System32\drivers目录里,生成xxx.sys文件。这些xxx.sys文件,无法直接删除,用杀毒软件也很难卸载。这里介绍一种方法,可以卸载顽固的驱动或软件,就是进入系统的【安全模式】 --》找到该xxx.sys文件或软件,直接删除即可。原创 2024-07-21 20:20:28 · 4879 阅读 · 1 评论 -
VS2019安装MFC组件
VS2019支持的MFC版本是mfc140 ~ mfc142版本,它兼容VS2015、VS2017之前的老版本程序。VS2019支持的C++最高版本为C17,是Win7系统上最后一个可以安装的IDE。原创 2024-07-20 12:02:05 · 3540 阅读 · 0 评论 -
解决Linux环境Qt报“cannot find -lgl“问题
今天,在Ubuntu18环境下,安装Qt5.14.2之后,运行一个QWidget工程,发现Qt报"cannot find -lgl"错误。出现这种现象的原因:Qt的Path路径没有配置,缺少libqt4-dev依赖包和一些必要的组件。原创 2024-07-02 19:23:51 · 1997 阅读 · 0 评论 -
QSqlDatabase的数据库路径或名称问题
在Qt的数据库编程中,先是设置数据库的类型,然后是设置数据库文件的路径。这个setDatabaseName(“xxx.db”)函数,对路径的依赖比较敏感。在Windows平台上,需要将路径的分割符号斜杠,要写成2个//斜杠。原创 2024-05-05 11:01:29 · 740 阅读 · 0 评论 -
解决“未能正确加载QtVsToolPackage包“问题
在Visual Studio时,有时弹出"未能正确加载QtVsToolPackage包"问题,出现这种现象的是:qt-vsaddin升级失败或者版本不兼容,造成QtVsToolPackage无法加载。原创 2024-05-01 10:20:32 · 3844 阅读 · 0 评论 -
SQLServer设置端口,并设置SQLServer和SQLServer Browser服务
SQLServer默认使用动态端口,即每次启动sqlserver.exe时,端口port都会动态变化。若要使用静态端口,比如port=1433,则需要在SQL Server Configuration Manager(简称SSMS)里配置。这里以SQL Server 2005 Configuration Manager软件为例,进行说明.原创 2024-01-07 17:29:15 · 5461 阅读 · 0 评论 -
解决“SQLServer 添加数据库,报Error 5118“错误
当将把一个SQLServer数据库文件*.MDF和日志文件*.LDF,从电脑A拷贝到电脑B,然后在电脑B上,使用Microsoft SQL Server Management Studio添加该*.MDF文件,有时报"Error 5118"错误;出现这种问题的原因:当前文件采用压缩格式保存,需要取消这种压缩格式;解决方法:右击该*.MDF文件 --》属性 --》高级 --》去掉"压缩"--》应用 --》OK同理,右击该*.LDF文件--》属性 --》高级 --》去掉"压缩"--》应用 --》OK原创 2024-01-06 17:12:33 · 1043 阅读 · 0 评论 -
解决SQLServer访问*.mdf文件“报Unable open file Error5120“问题
今天,在使用Microsoft SQL Server Management Studio附加Hello_Data.MDF数据库时,弹出“Unable to open the physical file *.MDF system error 5 Error:5120”错误;出现该问题的原因:当前用户对Hello_Data.MDF、Hello_Data.LDF没有读写权限。原创 2024-01-06 16:36:56 · 1640 阅读 · 0 评论 -
解决Qt“报无法定位程序输入点xxx于动态连接库“问题
今天,在使用Qt+VS2019编译工程时,弹出"无法定位程序输入点xxx于动态链接库"问题,如图(1)所示。出现这种问题的原因有很多:(1) 工程Release/Debug,与lib的Release/Debug不一致;(2)Qt的Path环境没有设置好,应该区分工程的32或64位,MSVC或MingW路径;(3) 子类没有实现父类的虚函数,导致编译报错。原创 2023-12-25 23:07:36 · 11351 阅读 · 0 评论 -
Qt Creator设置IDE的字体、颜色、主题样式
Qt是一款开源的、跨平台的C++开发框架,支持Windows、Linux、Mac系统,从1995发布第一版以来,发展迅猛,最开始是用于Nokia手机的Symbian(塞班)系统和应用程序开发,现在是用于嵌入式软件、桌面软件(比如WPS、VirtualBox)、Android软件等开发,到2023年12月,其最新的版本已经更新到了v6.6。而Qt Creator是Qt的开源实现IDE,现在已经集成到了Qt.exe里。这里介绍Qt Creator里字体、颜色、主题设置。原创 2023-12-09 11:21:10 · 14782 阅读 · 9 评论 -
Windows XP安装SVN软件
SVN全称为SubVersion,是Apache开源软件协议下,一个用于代码分布式管理的工具,其孵化的软件产品是TortoiseSVN,该软件是带图形界面的代码管理工具,类似于Git,多了一个图形界面,方便鼠标操作。Windows XP是微软于2001发表的一款32位的桌面操作系统,由于其耗内存少、运行速度快、操作方便,而大受欢迎。在2014年4月份,微软已停止该系统更新。虽然Windows XP不再更新,但一些嵌入式产商、超市售货系统、监控系统,仍然使用Windows XP。在XP上安装32位的SVN原创 2023-12-05 23:16:26 · 1504 阅读 · 0 评论 -
重命名com1.{d3e34b21-9d75-101a-8c3d-00aa001a1652}文件夹
后来google了好久,才发现它利用Windows畸形目录原理,让系统认为该文件夹是一个串口驱动或者一种打印机驱动,而规避删除或重命名。使用DeformityPath软件,就可以修改或者重命名该文件夹的名称和路径。原创 2023-11-19 16:11:55 · 835 阅读 · 0 评论 -
解决windeployqt打包exe的“VCINSTALLDIR is not set“问题
今天在使用windeployqt打包exe时,报"VCINSTALLDIR is not set"错误。出现这个问题的原因:VCINSTALLDIR 环境变量没有设置。若一台电脑里安装了多个VS,比如安装VS2013、VS2015、VS2017、VS2019等,则用英文的;分号,把这些路径连在一起,都放到VCINSTALLDIR环境变量里,然后重启电脑即可。原创 2023-11-16 23:21:40 · 3685 阅读 · 1 评论 -
C++ vector计算数组之和
在C++ vector是一个动态数组,支持按下标索引访问、顺序访问、动态扩容等。计算vector里的元素之和,既可以通过for循环遍历每一个元素,然后相加得到数组之和;也可以通过调用accumulate()库函数,输入vector的起点、终点、参考原点(默认是0或者0.000),来得到数组之和;还可以通过for_each+lamba表达式,来计算元素之和。比如,有一个数组std::vector arry = { 1,2,3,4,5,6,7,8,9 }, 计算这个arry数组之和。原创 2023-11-14 09:57:54 · 14855 阅读 · 0 评论 -
C++里的const变量、const函数、const指针、const数组等
在C++语言中,有时候需要使用常量,这里的常量是指广义的常量,包括const变量、const函数、const指针、const数组等等。常量,具有只读属性,即一旦值已经初始化,就只可读取,无法修改,类似于只读光盘一样,值已经写进常量区,只可读取,无法二次写入。原创 2023-11-05 10:18:31 · 550 阅读 · 0 评论 -
visual studio设置主题和背景颜色
visual studio2019默认的主题有4种,分别是浅白色、深黑色、蓝色、蓝(额外对比度),背景颜色默认是纯白色RGB(255,255,255)。字体纯白色看久了,眼睛会感到酸痛、疲劳,建议改成浅白RGB(250,250,250)、豆沙绿RGB(85,123,105)、透明蓝白色RGB(248,249,253)、炫酷黑RGB(30,30,30)或RGB(50,50,50)等柔软的颜色。原创 2023-10-12 21:53:20 · 16881 阅读 · 0 评论 -
生成Release版本的.pdb文件
软件分为Debug版本、Release版本这2种版本,其中Debug版本是带有.pdb调试信息文件,而Release版本不带.pdb调试信息文件。软件发布时,一般采用Release版本,若因内存泄漏、数组访问越界、除零错误、磁盘读写错误等异常,造成软件崩溃,会生成一个.dmp崩溃文件。该.dmp崩溃文件,如同飞机的黑匣子,记录软件(或飞机)处于崩溃那那一刻的堆栈信息、运行错误和执行的代码语句行。.dmp文件需要Release版本的exe携带.pdb调试信息或.pdb文件,才能解析到具体的代码崩溃行。原创 2023-10-06 08:27:53 · 3789 阅读 · 0 评论 -
visual studio禁用qt-vsaddin插件更新
visual studio里qt-vsaddin插件默认是自动更新的,由于qt-vsaddin插件新版本的操作方式与老版本相差较大,且新版本不稳定,容易出Bug,所以需要禁用其自动更新,步骤如下:点击VS2019菜单栏上的【扩展】--》 管理扩展 --》已安装 --》工具 --》Qt Visual Studio Tools --》去掉"自动更新此扩展"前面的对钩√原创 2023-10-03 17:12:10 · 1477 阅读 · 0 评论 -
在visual studio里配置Qt插件并运行Qt工程
Qt插件,也叫qt-vsaddin,它以*.vsix后缀名结尾。从visual studio 2010版本开始,VS支持Qt框架的开发,Qt以插件方式集成到VS里。这里简述在visual studio 2019里配置Qt 5.14.2插件,并配置Qt环境、编译和与运行Qt工程。原创 2023-10-02 23:14:31 · 27850 阅读 · 0 评论