- 博客(251)
- 资源 (3)
- 收藏
- 关注
原创 在QtCreator中使用GitHubCopilot
QtCreator 16.0.2版本已集成Github Copilot插件,但启用过程较为复杂。首先需要注册Github账号获取Copilot免费版;其次安装新版Node.js以避免配置报错;然后通过Neovim/Vim插件安装Copilot。在QtCreator中需手动在Extension中启用插件,并指定language-server.js文件路径(可使用everything工具搜索)。最终在代码编辑界面右下角控制Copilot的开启/关闭。整个过程涉及多步骤配置,但成功后可获得AI辅助编程功能。
2025-06-12 15:40:04
71
原创 在Linux下使用vscode使用交叉编译工具链的gdb对core文件进行堆栈、变量查看
我们拿到此文件后,可以在交叉编译的主机上,利用其工具链的gdb+编译时产生的符号信息来查看gdb的内容,方便我们定位代码出错的地方。但是仅仅用gdb的话,只能靠命令行窗口查看,不是很方便,但是可以配合vscode。注意下面这段代码是需要自己手动插入的,vscode自带的模板中是没有的。在vscode的debug栏,点击Run and debug里面的。当我们交叉编译的程序在目标机器崩溃挂掉的时候,一般可以通过设置。然后,执行,就可以看到调用堆栈、局部变量、源码等信息了。让其生成一个core文件。
2025-06-11 19:38:46
188
原创 创建Loongarch64的交叉编译rootfs(含第三方二进制库)
摘要:本文介绍了利用目标机器安装第三方库并通过rsync同步文件到主机进行交叉编译的优化方案。具体操作包括:1)通过rsync同步目标机器的/lib、/usr/include和/usr/lib目录到主机的sysroot;2)使用symlinks工具或Python脚本处理绝对路径软链接问题;3)用交叉编译工具链的sysroot覆盖自建sysroot;4)在Qt项目中添加rpath-link路径以确保编译时库查找。这种方法避免了逐个编译依赖库的繁琐,显著提高了交叉编译效率。特别提醒注意rsync的--delet
2025-06-10 14:47:40
841
原创 在Ubuntu上利用loongarch64交叉编译工具编译opencv4.4.0
本文介绍了在LoongArch64架构上交叉编译OpenCV的步骤。首先需要配置好loongarch64交叉编译工具环境,然后下载OpenCV源码并修改平台配置文件,将aarch64-gnu.toolchain.cmake复制并重命名为loongarch64-gnu.toolchain.cmake,更新GNU_MACHINE路径。使用CMake-GUI配置时选择该工具链文件,并取消不必要的选项以提高编译效率。建议勾选world选项将所有模块编译成单个动态库。最后执行make和make install完成编译
2025-06-09 17:49:00
334
原创 在Windows下利用LoongArch-toolchain交叉编译Qt
摘要:本文介绍了在Windows和Ubuntu环境下使用龙芯交叉编译工具链进行交叉编译的实践。首先验证了在Windows下使用Mingw工具链编译简单C++程序的可行性,但在尝试编译Qt时遇到架构检测错误。随后转为在Ubuntu虚拟机中使用Linux版工具链成功配置编译环境。文中详细记录了下载工具链、配置Qt源码(创建loongarch64的mkspec文件)以及编写编译脚本的完整过程,最终实现将编译时间从qemu的20分钟缩短至2分钟,效率提升90%。该方案为龙芯平台开发提供了高效的编译解决方案。
2025-06-06 17:16:43
1103
原创 遍历继承QObject的对象的属性
摘要:使用QtRemoteObjects实现前后端通讯时,发现自动重连后POD类型属性会重新触发Changed信号,但复杂类型不会。为此需要在QRemoteObjectReplica::stateChanged槽函数中手动触发所有属性的变更信号:当状态变为Valid时,遍历元对象属性,对有通知信号的属性读取当前值并手动发射信号,从而确保重连后相关处理函数能被执行。该方法有效解决了复杂类型属性在重连后不自动触发信号的问题。
2025-06-04 13:19:15
215
原创 将通过qDebug、qWarning等输出的信息保存到日志文件中
假如想将qDebug、qWarning等输出的信息既在控制台(或/且在QtCreator的应用输出中)中显示,又可以将输出保存到日志文件中,可以利用。下面的代码实现了上述的功能,同时还可以让在控制台的输出带颜色。
2025-05-08 19:41:08
262
原创 opcua批量读取变量
之前通过订阅的方式监听PLC变量的变化,但是在使用的过程中,不知道是PLC的opcua服务器的问题还是别的问题,在某些情况、某些时候,会出现订阅不活跃的情况。最后没办法,只能自己实现“订阅”:周期性地读取变量值,然后与上一次读取的值进行对比,假如不一致就发出changed信号。那么,在我们的程序中,可以先读取这个限制值,然后再把我们的变量分成若干批去读。但是交付给同事测试时,发现会报错,返回的错误码为0x80100000,也就是。出现这种情况后,就接收不到变量的变化了。这个值是只读的,不允许客户端修改的。
2025-04-21 17:05:40
329
原创 使用zbar解码一维码
后来尝试了一下zbar,发现可以解码。之前都是直接用zxing来解码一维码的,但是今天遇到了一个看起来很清晰的一维码,但是zxing死活解码不了的情况。我们选用mchehab/zbar,但是不是直接下载它的源码来编译,因为会很麻烦。我的电脑编译了一个小时,不过时间主要是花在编译其依赖的第三方库。这个zbar的原始作者已经在2012年停止维护了,但是有个项目继承了,在此处。但是有个问题,不知道为啥,识别不出二维码。编译好后,在pro文件中引入头文件和库文件,就可以顺利使用了。,貌似持续做了不少更新。
2025-04-03 13:50:59
273
原创 在Qt中判断输入的js脚本是否只包含函数
目前在使用QtScriptEngine,在利用evaluate注册子函数时,要求用户输入的js文件中的内容仅仅是函数,函数体外,不能出现一些变量的声明、函数的调用等其他代码。
2025-03-29 11:39:19
344
原创 Qt程序基于共享内存读写CodeSys的变量
但是,在实际的项目中,要到使用到的结构体往往是多种类型的结构体互相嵌套的结果。假如我们和PLC的通讯只是简单的一个结构体,结构体中都是一些POD(Plain Old Data),那可以直接和PLC程序编写人员协商沟通好,让他把结构的定义代码发给你,你再根据ST代码写出结构体的C++代码。要想将Application的结构体数据直接导出,貌似是不行的,但是可以先把结构体数据复制到一个Library工程,然后导出m4文件,最后利用python脚本翻译(处理)成我们需要的代码。
2025-03-15 14:37:05
1023
原创 基于RTTR在C++中实现结构体数据的多层级动态读写
如此一来,在c++中,使用字符串来定位+读写结构体成员数据的操作就实现了。这个只是基础,如何发挥它真正强大威力,等下一篇再介绍了。预告一下,主要是用共享内存来实现进程间读写PLC变量的。参考【C++笔记-RTTR编译&安装&简单使用】
2025-03-14 14:00:28
913
原创 Linux系统下设置程序的CPU亲缘性及线程测试
我写了个程序来测试,指定此程序只在核1上运行。从top指令的结果可以看到,程序的确只在核1上运行,且无论申请了多少个线程,这些线程都是在核1上运行。在linxu系统下,可以通过taskset来设置程序的cpu亲缘性,也就是可以限制程序只能在哪些(甚至是哪个)核上运行。
2025-03-05 13:55:32
320
原创 康耐视智能相机(Insight)通过ModbusTCP发送字符串到倍福(BECKHOFF)PLC中
通过底层的方式实现数据传输,学是能够学到好多东西,但是就是贼麻烦,且鲁棒性差。不知道为啥Modbus这么通用的功能,康耐视智能相机为啥就是不支持。【TwinCAT 3 Modbus TCP使用方法】【Modbus TCP协议说明】【ModbusTCP数据帧】【如何看懂Modbus数据帧?
2024-12-12 11:28:08
2002
原创 在QML中访问野指针属性导致程序崩溃
最近在对之前写的一个软件进行重构,重构完之后,给到现场去用。现场反馈说,软件操作操作着,就崩溃了。这些全是qml里面的东西,又不给从c++到qml的调用堆栈,哪怕只是qml代码的调用堆栈也好。不知道怎么定位好了。
2024-10-22 13:55:12
554
原创 使用纯代码加载glb/gltf文件,然后使用Qt3D来渲染
在,我们已经实现了使用Assimp来读取模型,然后放到Qt3D中渲染。但是有时候,Assimp库的编译太麻烦:我们有时会发布程序到手机、或者嵌入式板子上,编译一个可以在这些设备上使用的Assimp库工作量太大。有没有办法,直接把某个库的代码包含进我们的工程,不依赖任何其他第三方库(或者依赖的库也是纯代码的形式包含进来),直接编译就行了呢?这样,我们就不用为各个平台都编译第三方库了。
2024-09-20 16:07:58
1784
原创 使用Assimp加载glb/gltf文件,然后使用Qt3D来渲染
ModelLoader.hModelLoader.cpp参考【How can I load a QPaintedTextureImage into a QTextureMaterial?】
2024-09-18 10:13:46
1110
原创 Qt中使用DAG(有向无环图)
后来要求工具之间能存在依赖关系,也就是A工具的输出可以作为B工具的输入,这样就很麻烦了,谁知道用户会怎么勾搭各个工具的输入和输出?之前做的一个视觉检测项目,本来各个视觉检测工具之间是独立的,单独执行图像输入、得出结果,然后综合汇总结果,简单明了。这个库是实现了有向无环图的表示,但是在添加子对象时,没有检查添加子对象后会不会造成环型;结果发现,这个工具与工具之间得依赖、拓扑关系,是一个著名的概念:有向无环图(DAG)。,但是这个库貌似是依赖boost,有点大。ok,既然找到资料的切入点,那就好办了。
2024-09-06 16:31:38
615
3
原创 CodeSys中动态切换3D模型
在前面的中,我们已经实现了一个可以显示3d模型的控件。但是这个控件是和使用的3d模型绑定死的,在安装这个控件时就已经将模型文件于控件一起安装到codesys中。假如我想在不同的工程中,对这个控件动态地指定不同的模型,该怎么实现?
2024-09-05 17:09:50
1171
原创 QtWebEngineView加载本地网页
直接加载放在exe同级目录下的资源是不行的,需要把资源通过qrc放到exe里面,然后通过类似。运行网页中包含的脚本,还可以取得返回值。这样的路径加载才行。
2024-08-23 15:19:30
792
原创 Qt下让程序只运行一个实例,避免重复打开
做了一点点更改,主要是在openEuler上用时遇到的一点问题。在主函数实例化Application后,调用即可。
2024-08-19 14:00:34
590
原创 如何对open62541.h/open62541.c的UA_Client进行状态(在线/掉线)监控
可以发现,我们可以对UA_ClientConfig中的stateCallback进行赋值,也就是注册一个状态回调函数,从而获取客户端的状态变化。上位机这边会定时对PLC的某个opcua变量进行写操作。目前在利用open62541.h/open62541.c编写了一个与PLC进行OPCUA通讯的上位机程序。这个opcua库对多线程的处理比较差,很容易造成冲突。有没有什么办法可以监控client的状态,了解其是什么时候掉线,掉线了我就不写就行了。幸亏,是有这么一个回调函数的,参考官方的例子。
2024-08-12 15:05:14
957
2
原创 Windows下,已知程序PID,取得其窗口句柄HWND
我需要实现这么一个功能:在知道某个程序的PID的情况下,最大化并且置顶显示这个程序的窗口。listProcessIdentifier函数的实现请看前一篇。
2024-08-05 15:38:02
1047
原创 在Qt中获取Windows中进程的PID
利用 QProcess调用这个tasklist有一点坑,已经在代码中指出了。主要是用到了系统自带的工具【tasklist.exe】可以看到,得到的结果与在任务管理器中看到的是一致的。指定为csv格式输出的话,在后处理时比较方便。
2024-08-02 11:30:44
766
原创 使用Qt3D绘制机械手场景
之前是使用Coin3D来绘制机械手场景的【Qt利用Coin3D(OpenInventor)进行3d绘图】。后来需要在HarmonyOS显示这个机械手模型,但是想要编译Coin3D到HarmonyOS的话,显然太难了。然后尝试使用OpenGL原生的函数来绘制,但是HarmonyOS对很多函数都不支持,一查,发现HarmonyOS支持OpenglES。那就麻烦了。最后,一番兜兜转转,还是用回Qt3D吧。
2024-07-31 14:41:32
870
原创 DevEco Studio中使用Qt,编写HarmonyOS程序
最近需要尝试把之前在Windwos下用Qt实现的程序移植到鸿蒙(HarmonyOS)系统上。我使用的DevEco版本是5.03.501找了一下资料,官方(也可能是社区)人员已经做过了Qt的移植。下载了后,按照他们的操作手册来操作就可以了。
2024-07-28 15:12:29
6019
13
原创 利用git将Qt代码托管到U盘或者网盘
我们在开发项目时,随着项目需求的增加以及bug的修复,肯定会涉及到版本管理的问题。由于git的使用具有一定的门槛,之前我都没怎么用。基本没有怎么进行版本管理,而是周期地(比如每天)把代码压缩打包备份一下,然后将他们放到网盘中,如下图所示:但是这样没办法迅速、明确地知道自己两个不同的备份之间有那些不同,尤其是想回退到某个特定的版本时,简直就是噩梦。而git就能很好地进行版本管理。说到git,肯定就有人想到github了。但是有一些代码是不方便外传的;又或者出于谨慎,只想把代码备份到U盘的;
2024-07-05 17:06:35
1015
原创 Qt(MSVC)下报“语法错误缺少“}““语法错误缺少“常数“ 的解决办法
只要把这个头文件放在QtHttpServer的后面就可以了。经过一番排查,发现了问题。是open62541.h的问题。后面我知道了,再更新上来。我记得之前我用得好好的啊。
2024-07-03 14:03:13
664
原创 Qt利用Coin3D(OpenInventor)进行3d绘图
首先,到官网下载我是Qt5.15.2+vs2019的,因此我选择这个coin-4.0.2-msvc17-x64.zip到官网下载Coin3D在Qt中的封装库我是Qt5.15.2+vs2019的,因此我选择这个quarter-1.2.1-Qt5.15-msvc17-x64.zip将这两个压缩包放在在同一个文件夹中,先解压coin-4.0.2-msvc17-x64.zip,然后再解压。
2024-06-19 15:42:51
1878
原创 在Qt编写的exe或者dll中设置版本号
在别人编写的exe或者动态库中,通过右键–》属性–》详细信息中,通常都有版本信息:那我们自己编译出来的Qt程序,如何设置这些版本号呢?
2024-06-17 14:17:28
1985
原创 将机械手与CodeSys中的运动学模型绑定
最近搞到了一台工业机械手,虽然这个机械手有自己的控制程序,但是我们还是想用CodeSys来进行运动控制,测试一下它的运动控制功能是否可用。下面介绍一下如何将CodeSys中的运动学模型与现实的机械手进行绑定(映射、对应,使用你喜欢的术语)。可能运动学模型有些结构一眼看上去和实际的物理机械手结构不一样,但只是距离为0而已。一定要确保能够对应上才能进行后面的操作。
2024-05-11 10:32:54
2427
原创 Qt使用OPCUA
但是在Qt6之前,假如想使用这个库,还得自己编译,比较繁琐。假如想开箱即用,而且没有使用太复杂的功能的话,其实可以直接使用open62541.h、open62541.c这两个文件。假如想在Qt下使用OPCUA通讯,貌似大家都是倾向于使用。然后就可以参考官方的例程来进行开发了。
2024-04-28 14:40:09
1938
原创 关于通用相机库
之前以为既然工业相机(usb3_vison,gige)使用了同样的通讯标准,那应该可以使用同样的sdk。但是事实上,并不行,不同厂家的同样通讯标准的相机,并不通用,比如,我想用Basler的Pylon打开海康威视的相机,打不开。难道说,这个GenICam协议,是软件层的协议,而不是通讯链路层的协议?这两个库,弄懂了他们的区别,应该就知道GenICam真正是个什么东西。但是,为啥会涉及各个相机的SDK?然后再翻一下它的资料。根据它的资料介绍,貌似可以支持好多相机。
2024-04-25 11:05:27
1204
康耐视智能相机ModbusTCP发送字符串代码
2024-12-12
windows下使用的Tesseract库
2020-10-16
sysrootChange.py
2020-06-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人