QT
文章平均质量分 73
sanqima
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
使用“桥接模式“,实现跨平台绘图或多类型消息发送机制
本文介绍了桥接设计模式及其两种C++实现场景。桥接模式通过将抽象部分与实现部分分离,使它们能独立变化。案例1展示了跨平台绘图系统,Shape抽象类与DrawingAPI实现类解耦,支持不同平台绘制不同形状。案例2实现了多类型消息系统,Message抽象类与MessageSender实现类分离,支持组合不同消息类型和发送方式。桥接模式核心价值在于:1)抽象与实现解耦;2)灵活组合功能;3)符合开闭原则,便于扩展。两个案例均通过构造函数注入实现类,展示了桥接模式的实际应用。原创 2025-07-20 16:43:22 · 544 阅读 · 0 评论 -
在C++里如何避免栈内存溢出
C++编程中栈内存有限,栈溢出通常由递归过深或局部变量过大导致。本文提出6种解决方法:1)用迭代或尾递归替代普通递归;2)使用堆内存或STL容器管理大型数据;3)优化数据结构,避免栈上创建大对象;4)谨慎调整栈空间限制;5)通过静态分析和深度限制预防风险;6)确保递归终止条件正确。核心建议是优先优化代码结构,合理分配内存资源,避免过度依赖栈空间。原创 2025-07-20 16:28:18 · 800 阅读 · 0 评论 -
判断QMetaObject::invokeMethod()里的函数是否调用成功
本文详细介绍里的invokeMethod()函数的2种调用方式:同步调用、异步调用。只有同步调用,才能根据invokeMethod()的返回值,来判断函数是否执行成功。而异步调用,则需要借助信号槽的方式,在执行完之后,发送一个信号给调用者(或子线程)即可。原创 2025-07-15 22:39:56 · 1427 阅读 · 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 · 1221 阅读 · 0 评论 -
厨师与食客:生产者/消费者模式(基础版)
摘要:该代码实现了一个煎饼摊的生产者-消费者模型,使用Qt框架的多线程机制。系统包含1个厨师线程(生产者)和3个顾客线程(消费者),共享5个托盘缓冲区。通过QMutex和QWaitCondition(方案1)或QSemaphore(方案2)实现同步控制,确保当托盘满时厨师等待,托盘空时顾客等待。厨师每生产一个煎饼需500ms,三个顾客分别以700ms、900ms和1100ms的速度消费。最终共消费20个煎饼后程序终止,验证了多线程同步机制的正确性。原创 2025-05-25 21:40:00 · 250 阅读 · 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 · 1297 阅读 · 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 · 576 阅读 · 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 · 461 阅读 · 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 · 2675 阅读 · 0 评论 -
解决“SVN无法上传或下载*.so、*.a等二进制文件“问题
今天,在使用Subversion提交代码到服务器时,发现无法提交*.a、*.so等二进制文件,右击这些文件,发现其属性为ignored。问题原因:SVN的配置文件里,屏蔽了*.a、*.so文件的上传与下载,并把这些文件标记了ignores。解决方法:在SVN的配置文件里,去掉*.a、*.so文件的ignores标记,重启电脑即可。原创 2024-12-19 21:13:41 · 1287 阅读 · 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 · 2925 阅读 · 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 · 1007 阅读 · 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 · 2217 阅读 · 0 评论 -
QSqlDatabase的数据库路径或名称问题
在Qt的数据库编程中,先是设置数据库的类型,然后是设置数据库文件的路径。这个setDatabaseName(“xxx.db”)函数,对路径的依赖比较敏感。在Windows平台上,需要将路径的分割符号斜杠,要写成2个//斜杠。原创 2024-05-05 11:01:29 · 862 阅读 · 0 评论 -
解决“未能正确加载QtVsToolPackage包“问题
在Visual Studio时,有时弹出"未能正确加载QtVsToolPackage包"问题,出现这种现象的是:qt-vsaddin升级失败或者版本不兼容,造成QtVsToolPackage无法加载。原创 2024-05-01 10:20:32 · 5180 阅读 · 3 评论 -
解决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 · 13069 阅读 · 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 · 16693 阅读 · 13 评论 -
解决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 · 4414 阅读 · 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 · 17457 阅读 · 0 评论 -
C++里的const变量、const函数、const指针、const数组等
在C++语言中,有时候需要使用常量,这里的常量是指广义的常量,包括const变量、const函数、const指针、const数组等等。常量,具有只读属性,即一旦值已经初始化,就只可读取,无法修改,类似于只读光盘一样,值已经写进常量区,只可读取,无法二次写入。原创 2023-11-05 10:18:31 · 635 阅读 · 0 评论 -
生成Release版本的.pdb文件
软件分为Debug版本、Release版本这2种版本,其中Debug版本是带有.pdb调试信息文件,而Release版本不带.pdb调试信息文件。软件发布时,一般采用Release版本,若因内存泄漏、数组访问越界、除零错误、磁盘读写错误等异常,造成软件崩溃,会生成一个.dmp崩溃文件。该.dmp崩溃文件,如同飞机的黑匣子,记录软件(或飞机)处于崩溃那那一刻的堆栈信息、运行错误和执行的代码语句行。.dmp文件需要Release版本的exe携带.pdb调试信息或.pdb文件,才能解析到具体的代码崩溃行。原创 2023-10-06 08:27:53 · 4551 阅读 · 0 评论 -
visual studio禁用qt-vsaddin插件更新
visual studio里qt-vsaddin插件默认是自动更新的,由于qt-vsaddin插件新版本的操作方式与老版本相差较大,且新版本不稳定,容易出Bug,所以需要禁用其自动更新,步骤如下:点击VS2019菜单栏上的【扩展】--》 管理扩展 --》已安装 --》工具 --》Qt Visual Studio Tools --》去掉"自动更新此扩展"前面的对钩√原创 2023-10-03 17:12:10 · 1771 阅读 · 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 · 33739 阅读 · 22 评论
分享