- 博客(185)
- 资源 (14)
- 收藏
- 关注
原创 当qt对象通过movetothread移动到子线程中后,其生命周期仍在创建对象的线程中,为什么对象中的方法却可以在子线程中运行?
Qt中对象通过moveToThread()移动后,其生命周期仍由创建线程管理,但方法可在子线程执行。这是因为线程亲和性决定事件处理线程,而方法调用方式决定执行线程:直接调用在原线程执行,信号槽或invokeMethod则通过事件队列在目标线程执行。Qt通过事件驱动机制保证线程安全,要求跨线程操作必须通过事件队列传递。本质是线程亲和性与事件系统的解耦设计,使方法执行与生命周期管理分离。
2025-10-11 08:34:02
273
原创 qt使用camke时,采用vcpkg工具链设置VTK的qt模块QVTKOpenGLNativeWidget
摘要:本文介绍了在vcpkg中安装VTK并配置Qt5支持的方法。首先需要修改vcpkg的VTK端口配置文件,将默认的Qt6引用改为Qt5,涉及三处关键修改点。安装时可选择特定模块或使用vtk[all]安装全部功能。在VS工程配置中,需正确设置CMakeLists.txt以链接Qt和VTK库,并演示了如何创建包含VTK可视化窗口的Qt应用程序框架,包括OpenGL上下文配置、模型加载和渲染管线设置。文中还提供了完整的Qt主窗口类实现代码,展示了STL文件读取、3D模型渲染和交互操作等功能集成方案。
2025-09-17 17:00:44
200
原创 VS2022中使用cmake+vcpkg工具链编译meshlab源码
这篇摘要介绍了使用VS2022编译MeshLab项目的完整配置流程。关键步骤包括:1)准备代理软件用于下载资源;2)安装必备工具(CMake、VS2022、vcpkg);3)通过vcpkg安装依赖库(CGAL、Qt5、Eigen等);4)使用Git克隆MeshLab源码并初始化子模块。编译时建议在VS2022中直接配置CMake项目,设置vcpkg工具链路径,清除缓存后重新编译。最后通过调试meshlab.exe启动程序。该方法利用vcpkg工具链自动处理依赖,简化了复杂的配置过程。
2025-09-17 16:21:05
227
原创 qt使用camke时,采用vcpkg工具链设置OSG的qt模块osgQOpenGLWidget
该摘要描述了在CMake中配置OpenSceneGraph(OSG)3.6.5时遇到的问题和解决方案。主要内容包括:1)使用find_package查找OSG及其组件;2)处理osgQt分离为子项目后的兼容性问题;3)修改FindosgQt.cmake文件以适配新版本osgQt_qt项目;4)添加vcpkg路径确保头文件正确包含。尤其强调了新版本osgQt使用QOpenGL后头文件和库的变化,以及如何通过修改CMake模块文件来解决这些问题。
2025-09-14 18:30:20
317
原创 qt中浮点数,longlong整数互转
文章摘要:本文介绍两种double转long long的方法:1)使用联合体结构uointemp,通过共享内存空间实现类型转换;2)利用QVariant类进行转换,先构造QVariant对象再调用toLongLong()方法。两种方法各有特点,前者直接高效,后者借助Qt框架更安全可靠,可根据实际需求选择适合的转换方式。
2025-08-04 20:36:16
161
原创 CMake在VS中使用远程调试
CMake在VS中使用远程调试时,Launch.vs.json中远程调试设置 ,远程电脑开启VS专用的RemoteDebugger。在启动项中将出现DmnCnc-Remote的选择项,启动即可进行远程调试,注意需要将其他相关dll复制到远程exe同目录下.选中CMakeLists.txt, 右键-添加调试配置-选中"C\C++远程windows调试"
2025-06-04 20:00:36
342
原创 QT采用cmake编译时文件解析
作用:定义项目名称为,并指定项目语言为C++。关键变量:自动生成(项目源码路径)和(构建输出路径)。main.cppQtWidgetsApplication3.ui # Qt Designer设计的界面文件QtWidgetsApplication3.h # 头文件(可能包含Q_OBJECT宏)QtWidgetsApplication3.cpp # 实现文件作用:将源文件、UI文件和头文件统一管理,方便后续构建。跨版本支持:通过动态选择适应不同Qt版本。自动化构建:利用AUTOMOC。
2025-04-19 19:51:05
672
转载 使用向量方法求解线段交点
顺便一提,这种“将点和向量统一表示”的思想在计算机图形学中有很重要的应用,即齐次坐标。求解两直线交点的代码。代码相当简洁,而且可以应对包括直线斜率无穷大在内的所有情况。(用向量加法表示点的平移),现在我们的任务就是求出标量。函数求的是向量积的模,所以返回的是个标量。如图所示,有两条直线交于点。(两向量平行)这个式子求出。好了,现在我们求出了标量。首先我们需要写一个向量类。来表示直线 1,用点。来求直线交点,就是利用。
2025-04-02 14:51:08
295
原创 投影向量的计算公式推导
下面,我们将使用向量的投影公式来计算一个向量a在向量b上的投影向量。投影向量是线性代数中一个非常重要的概念,它可以帮助我们更好地理解向量空间中的向量之间的关系。在向量空间中,一个向量可以被分解成两个向量的和,其中一个向量是另一个向量在某个方向上的投影向量。实际上,投影向量还可以使用向量的投影公式来计算。总之,投影向量是线性代数中一个非常有用的概念,它可以帮助我们更好地理解向量空间中的向量之间的关系。始向量分解成投影向量和与法向量垂直的向量的和。3 .原始向量可以被分解成投影向量和垂直千投影方向的向量的和。
2025-04-01 19:23:04
6943
原创 雷赛正弦震荡功能api详解
参数:ConnectNo指定链接号(0-254),默认值0。参数:ConnectNo指定链接号(0-254),默认值0。参数:ConnectNo指定链接号(0-254),默认值0。参数:ConnectNo指定链接号(0-254),默认值0。参数:ConnectNo指定链接号(0-254),默认值0。参数:ConnectNo指定链接号(0-254),默认值0。Axis指定轴号,0~实际轴数-1。Axis指定轴号,0~实际轴数-1。Axis指定轴号,0~实际轴数-1。Axis指定轴号,0~实际轴数-1。
2025-03-17 14:19:24
501
转载 VS2022中‘pwsh.exe‘ 不是内部或外部命令,也不是可运行的程序
vcpkg 是一个 C++ 库管理器,可以帮助你安装和管理 C++ 库。
2025-03-12 16:50:24
1818
原创 当使用vcpkg安装的qt5时,在VS调用出现libcrypto-*-x64.dll不是有效路径时
将 libcrypto-*-x64.dll 中的*直接改为编译好的dll中的数字,笔者为3,所以改成了3就正常了。笔者电脑路径: G:\vcpkg\installed\x64-windows\debug\plugins。installed\<环境路径>\x64-windows\plugins\qtdeploy.ps1。找到vcpkg安装路径中。其他环境下的也照上面改即可.release版路径。
2025-02-19 19:31:18
501
原创 在VS-qt的程序中,后期增加PCH预编译功能,提高编译速度
通过项目-属性-C/C++ 按图设置 预编译头-改为使用, 头文件-stdafx.h。stdafx.cpp中只需要保护头文件即可,主要作用用来创建pch文件。由于前期创建qt程序的时候为勾选pch功能,导致没有启动预编译的功能.在项目中增加2个文件 stdafx.h和stdafx.cpp文件。选中stdafx.cpp文件-右键,将预编译头-改为创建.这种情况下需要增加pch功能应该怎么做?高级- 按图添加 stdafx.h。stdafx.h增加qt常用头文件。
2025-02-19 16:25:37
376
原创 在VS中通过vcpkg包管理器来安装使用qt5
从 GitHub 克隆 vcpkg 存储库。存储库包含用于获取 vcpkg 可执行文件的脚本,以及由 vcpkg 社区维护的特选开放源代码库的注册表。要执行此操作,请运行:控制台复制vcpkg 特选注册表是一组数量超过 2000 个的开源库。这些库已通过 vcpkg 的持续集成管道进行验证,可以协同工作。虽然 vcpkg 存储库不包含这些库的源代码,但它保存方案和元数据,以便在系统中生成和安装它们。
2025-02-18 16:40:29
981
原创 QWidget应用封装为qt插件,供其他qt应用调用
在之前的文章中,有介绍通过QProcess的方式启动QWidget应用,然后将其窗口嵌入到其他的qt应用中,作为子窗口使用.这篇文章主要介绍qt插件的方式将QWidget应用的窗口封装为插件,然后作为其他Qt应用中的子窗口使用.与主程序为同一个进程,免去了进程间繁琐的通信方式,在不同进程间通信时,需要有一套协议来保证数据的及时性及稳定性.比较繁琐,而插件的方式,通过插件接口文件来进行通信,在接口文件中定义API,
2024-12-27 16:26:48
535
原创 char*详解
char*是 C 和 C++ 中用于表示字符指针的类型。它通常用于指向单个字符或字符数组(即字符串)。理解char*的使用和操作对于编写高效、安全的 C/C++ 程序非常重要。以下是关于char*的详细说明,包括其常见用法、注意事项以及如何避免常见的陷阱。
2024-12-24 15:13:58
2275
原创 QCoreApplication, QGuiApplication, QApplication
QCoreApplication`, `QGuiApplication`, 和 `QApplication` 是 Qt 框架中用于创建不同类型的用户界面应用程序的基础类。- 如果你需要一个图形界面但是不需要传统的窗口系统,例如开发一个触摸屏设备上的应用,可以考虑使用 `QGuiApplication`。- 对于大多数需要图形界面的应用程序,尤其是那些涉及到窗口、按钮、文本框等元素的应用,应该使用 `QApplication`。- **用途**:适用于非图形用户界面的应用程序,如控制台应用或后台服务。
2024-11-27 08:48:38
423
原创 QTcpSocket客户端通过connectToHost设置失败
QAbstractSocket::UnsupportedSocketOperationError [ "对于这个操作代理类型是无效]2.或者通过 setProxy(QNetworkProxy::NoProxy) 为没有代理状态.网络代理软件打开了,就会报这个错误.1.关闭网络代理软件.取消代理.
2024-11-16 16:55:12
530
1
原创 QT中connect连接信号槽中使用lambda函数注意点
QThread::started()信号是在调用了m_pGenCode->start()时发送的,当start()执行时,会创建一个新的线程,同时发送一个started()信号.所以QThread::started()信号是在新的线程中发送的.当信号的发射位置(也即emit写的位置)与槽函数的接收者在不同的线程中时,默认就是队列的连接模式, 当发送信号时,将把信号发送到接收者线程的事件队列中,等事件队列执行到该信号时再执行槽函数.this在旧的主线程中, 所以默认是采用队列的连接模式.
2024-11-01 14:22:24
630
1
原创 VisualAssistX_2440在VS2022中的安装
下载VisualAssistX_2440https://downloadfiles.idera.com/WholeTomato/VA_X_Setup2440_0.exe 下载完成后安装, 但是可能没有反应, 可能需要将该插件调成兼容win7的模式.再次启动. 启动出来后,选中VS2022版本,这时候发现有可能一直在retrying模式下, 不要急, 通过everything搜索*.vsix,会在C盘的temp文件夹下搜到VaXSetup64.vsix,和VaXSetup.vsix,其中VaXSetu
2024-08-22 15:21:50
1232
2
原创 QT信号槽使用时机
虽然信号槽可以降低各个对象之间的耦合性,但同时也带来了对象之间逻辑的跳转的突然性, 当系统庞杂时,这种逻辑的来回跳转带来的是系统的繁杂. 特别像GUI中,都是在一个主线程中操作,对于各窗口对象之间的低耦合性,其实也就不是很有需要.本身每个窗口之间都是相互关联的, 父子对象的析构方式就决定了GUI窗口之间高度关联的产生. 所以在GUI之间的操作,能省去信号槽时,尽量省去.主窗口A与子窗口11通信, 也可采用在子窗口1中采用获取子窗口11对象指针的方式调用子窗口11中的成员函数. 减少信号槽的使用.
2024-08-21 09:40:51
456
原创 qt几种线程的个人理解
将整个类对象全部移动到子线程中,主线程采用信号槽的方式与子线程交互,这个是官方推荐的使用方式. 对于需要整个应用生命周期的存在并实时执行的动作, 同时需要独享资源的,这个方式是比较推荐的, 比如串口通信中对单个串口的读写,单个运动控制卡中api调用, sqlite数据库读写时,对于这种必须同一时刻只能有一个操作对象的硬件,最好采用这种方式,通过信号槽的方式,由于子线程事件循环的存在,可以很轻松的线程同步问题.省去了线程锁.必须在run中执行, 交互性一般,适合程序比较简单的应用.
2024-08-02 08:34:10
368
原创 QTransform 解析
实例: 以点(100,100) 围绕点(200,150)旋转45°后的坐标, 采用QTransform 类方法实现移动变换.,将在旋转后的坐标系下面, X轴方向偏移200,Y轴偏置150.将以(-200,-150)为原点,旋转坐标系45°.采用一个QTransform 对象,通过连续的变换后,发现最后的结果与预先的不一致.采用多个QTransform 对象,保证每个变换对象的初始原点坐标始终是(0,0).也可以单独一步一步的变换后,将上一步的结果作为下一步的输入点.
2024-07-09 14:52:32
494
原创 C++虚函数拾遗
上述这2篇文章即可.在C++中,基类是虚函数,子类对象指针赋值给基类对象指针, 编译器怎么知道当前指针是子类对象还是基类对象的指针?在C++中,当基类包含虚函数时,编译器会在对象内存中创建一个虚函数表(vtable)。每个类(包括基类和子类)都有自己的虚函数表,表中存储了该类的虚函数的地址。当你将子类对象的指针赋值给基类对象的指针时,基类指针实际上指向的是子类对象的内存区域。由于对象内存中包含了虚函数表指针(vptr),编译器能够通过这个指针找到正确的虚函数表,并调用相应的函数。
2024-06-29 09:14:23
853
原创 将qt的子进程窗口嵌入qt的主进程主窗口中(方法二)
2.当主进程窗口是showFullScreen()状态时,子进程存在QDailog窗口,或者一些其他控件会使当前子进程窗口失去焦点的操作时,会出现window7桌面任务栏弹出的现象.win10下正常. 笔者通过判断当前操作系统版本,然后通过将任务栏的自动隐藏功能开启后,可通过软件层面技术性解决该问题.将任务栏自动隐藏功能开启后,即使存在弹出现象,也因为隐藏后,不会显示. 当软件退出时,再取消该功能.监控父窗口控件变化,变化则发送一个信号到 m_ChildVMWin 的槽函数,重新设置子窗口大小。
2024-06-16 15:44:08
1312
原创 Visual Studio C++官方博客
Visual Studio 中的 C++ 重构工具 - C++ 团队博客 (microsoft.com)
2024-06-12 17:04:13
202
原创 将qt的子进程窗口嵌入qt的主进程主窗口中(方法一)
在主进程中创建子进程,子进程也是通过qt新建的qwidget窗口的应用程序.其他槽函数,及析构时的函数。在main函数中添加如下。
2024-05-31 19:07:52
1417
2
原创 QGraphicsView缩放时,场景中图元线宽始终为1个像素
通过将图元的QPen 的setwidth(0) , 这样view在缩放的时候,图元的线宽始终是1个像素宽度,如果设置为setwidth(1) ,则只在初始场景下的线宽为1个像素,当缩放时,会更加场景的的缩放倍率来调整对应线宽。
2024-05-22 13:23:33
280
原创 QGraphicsView中鼠标位置图像缩放时不变
这意味着,如果用户正将鼠标指针悬停在视图的某个点上并进行缩放操作,那么这个点将保持在鼠标指针下方,视图其他部分将围绕这个点进行缩放。这样,用户调整视图窗口大小时,可以更方便地继续之前的查看或编辑操作,而不需要重新定位到特定的区域。,那么缩放时你可能会发现视图偏离了你希望仔细查看的区域。同样,在调整窗口大小时,如果视图内容相对于窗口的位置发生了改变,这可能会中断你的工作流,因为你需要重新找到那个特定的区域。的变换锚和调整尺寸锚到鼠标下面的操作,是一个很常见的模式,尤其在实现图形视图的缩放和滚动功能时。
2024-05-22 09:09:50
1150
转载 结构体指针
这个操作符对于指针有两个不同的意义,当在申明的时候是申明一个指针,而当在使用p指针时是解引操作,解引操作右边是一个地址,这样解引操作的意思就是该地址内存中的数据。变量类型的出现是内存管理的必然结果,相信读者知道,所有的变量都是保存在计算机的内存中,既然是放到计算机的内存中,那必然会占用一定的空间。这里简单说了类型主要是为后面引出指针这个特殊性,在计算机中,将要运行的程序都保存在内存中,所有的程序中的变量其实就是对内存的操作。计算机的内存结构较为简单,这里不详细谈论内存的物理结构,只谈论内存模型。
2024-05-15 08:40:32
103
原创 如何将Git仓库中的文件打包成zip文件?
文件中被忽略的文件。如果您需要包含这些文件,您可能需要先将它们添加到仓库中,或者在创建zip文件后手动添加它们。这个命令允许您将任何git可访问的树或提交导出成一个归档文件。如果您想要打包特定的分支或标签,可以将。要将Git仓库中的文件打包成zip文件,您可以使用。如果您想要打包当前分支的最新版本,使用。可以采用powershell窗口。替换为分支名或标签名。
2024-05-12 13:57:33
1355
原创 QListView 事件过滤器中没有鼠标事件
如果您在尝试为QListView添加事件过滤器来捕获鼠标事件时遇到问题,这可能是因为QListView(或者更准确地说,它的视图部件)自身正在处理这些鼠标事件,从而阻止了事件传递到事件过滤器。在Qt的模型/视图架构中,视图通常会处理鼠标事件来实现项的选择、编辑等功能。
2024-05-11 14:48:10
517
原创 Qt自动形成父子关系的函数
在Qt中,父子关系对于对象的内存管理至关重要。当一个QObject派生的对象拥有一个父对象时,它会在父对象被销毁时自动被销毁。这种机制简化了内存管理,并防止了内存泄漏。
2024-05-09 15:02:06
730
osgQOpenGLWidget嵌入qt模块,VS2022使用cmake的方式,工具链vcpkg
2025-09-17
MFC list下拉和编辑功能非常实用
2015-04-09
VC12下调用scilab数学库引擎
2020-08-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅