自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(103)
  • 资源 (3)
  • 问答 (2)
  • 收藏
  • 关注

原创 VTK多线程渲染集成实践思路

本文探讨了VTK与Qt多线程渲染架构的集成实践。VTK作为科学计算可视化库,在多线程环境下面临对象系统复杂性、数据管道安全性和OpenGL状态管理等挑战。文章提出三层架构适配方案,详细分析VTK渲染窗口线程适配、数据管道异步处理和事件转发等关键技术要点,并分享版本兼容性、调试诊断和性能优化等实践经验。该方案特别适用于医学影像处理和科学计算可视化等场景,能显著提升UI响应性和渲染性能。实施建议从简单场景开始逐步扩展,需要具备VTK和Qt双重技术储备。未来发展可向GPU加速、云端渲染和VR/AR适配等方向演进。

2025-10-14 12:32:03 670

原创 Qt多线程渲染架构设计与实现思考

本文探讨了Qt多线程渲染架构的设计与实现,重点解决单线程渲染导致的界面卡顿问题。文章首先分析了单线程渲染的性能瓶颈和资源利用率低的缺陷,指出多线程模式可显著提升并行处理能力并改善用户体验。随后详细阐述了架构设计中的三大技术难点:OpenGL上下文管理、线程同步时序和资源生命周期管理,提出了基于信号槽通信和纹理共享的解决方案。最终实现了一个三层架构方案,包括用户界面层、场景图层和渲染执行层,通过分离UI线程与渲染线程,确保界面响应流畅的同时完成复杂图形计算。该架构具有良好的扩展性,可支持多个独立渲染实例,充分

2025-10-14 12:26:18 1005

原创 C++如何实现一个事务系统捕获数据变化并支持 undo/redo

摘要 本文分析了Qt事务系统的三种实现方式:1) 命令模式封装操作和撤销操作;2) 快照/备份方式保存完整对象状态;3) 基于数据块的精细化变更追踪。重点探讨了第三种方式的实现细节,通过Qt元对象系统动态获取属性值,在数据修改前记录原始值到事务中。系统采用事务管理器统一管理变更记录,支持undo/redo操作。实现时需注意事务状态检查、脏数据标记等关键点,确保数据一致性。通过对比分析不同方案的优缺点,为选择适合的事务机制提供了参考依据。

2025-09-16 15:59:28 880

原创 C++如何实现一个事务系统捕获数据变化

本文分析了Qt事务系统的实现机制,主要介绍了三种实现方式:基于命令模式、基于快照备份和基于数据片段的方式。重点讨论了第三种精细化控制数据的方法,通过元对象系统追踪变量变化并记录修改前的值。文章详细解析了Qt中事务机制的具体实现流程,包括事务开始、数据修改、undo/redo操作等关键环节,并指出了内存管理方面的注意事项。最后总结了Qt事务系统的核心思想:利用元对象系统动态访问属性、记录原始值、组织事务、实现撤销/重做功能,在保证数据一致性的同时提供灵活的版本控制机制。

2025-09-15 18:30:00 616

原创 从0开始做一个完整项目 -- 软件跨平台编译打包全流程

本文介绍了软件跨平台编译打包的全流程,重点分析了不同系统平台下的编译差异和解决方案。在编译阶段,主要面临系统API差异、库格式不同和环境变量等问题,可通过宏定义、标准库或抽象层解决。打包阶段则需根据不同平台(Windows/Linux/MacOS)使用相应工具(Windeployqt/linuxdeployqt/MacDeployQt)将依赖库与可执行文件打包。文章详细说明了各平台特定的编译参数设置和依赖检测方法,并特别提醒使用qml时需要额外处理模块目录。

2025-09-15 18:30:00 678

原创 github 大项目断点续传

某天打开github想要clone一个比较大的项目,大概1.5个G 结果发现总是会在中途中断,然后从0开始,每次都手动去弄麻烦的要死。守在电脑前守了半个多小时,发现根本clone不下来!离谱。

2024-05-09 10:38:58 3654 2

原创 记录一次难搞的编译错误-- qml-rust 项目编译无法找到QtCore库的问题

Qml+rustCMake+Cargo

2024-03-15 20:27:19 1634 1

原创 qml和C++数据交互之QQmlListProperty以及两种创建方式。

两种方式,实现QQmlListProperty,从而在qml中可以给C++的类增加属性,或者将C++的QList数组作为Qml中的modeldata使用。

2023-02-22 10:49:47 1801

原创 mac m1设备上安装Qt并使用qt编程遇到的问题以及解决方式

图文手把手解决M系列处理器安装Qt以及编译问题。

2023-02-19 15:51:07 3125

原创 设计模式 - 如何在库和主程序之间互相调用数据和函数

如何设计一个能在App和Lib中互相调用的结构,使函数、变量能够通过这个结构互相调用。

2023-02-19 15:46:32 680

原创 error LNK2001: unresolved external symbol “public: static struct QMetaObject 报错

error LNK2001: unresolved external symbol "public: static struct QMetaObject 报错

2023-01-10 15:43:06 3118

原创 Ignoring CMAKE_OSX_SYSROOT because the directory does not exist.

今天更新mac的xcode遇到了这个问题

2022-11-08 20:23:44 428

转载 如何通过CMake为QML创建插件

通过Cmake为QML创建插件

2022-07-17 16:16:31 1223

原创 Ubuntu 禁用向日葵的服务自启动

Ubuntu禁用向日葵的服务自启动。

2022-07-17 16:15:28 1894

原创 mac m1设备上安装Qt并使用qt编程遇到的问题以及解决方式

简单介绍M1平台使用qt编程会遇到的问题以及解决方式

2022-07-17 15:53:39 8539 3

原创 Mac Qt Creator通过open Terminal Here打开Iterm2的新窗口或者标签页

Mac Qt Creator通过open Terminal Here打开Iterm2的新窗口或者标签页

2022-07-06 09:50:06 873 5

原创 qmlplugindump executable not found.It is required to generate the qmltypes file for VTK Qml

遇到什么问题,直接找到问题相关的代码,然后从源头进行解决即可。

2022-06-29 14:36:51 876

原创 Mac安装的应用权限不够导致“XX” is damaged and can’t be opened. You should move it to the Trash 解决方案

mac平台新安装的应用无法打开的解决办法

2022-06-28 21:49:32 30974

原创 《C++性能优化指南》 linux版代码及原理解读 第八章 使用更好的库

本章节大部分都是概念上的讲解,这里用最后的总结做本章的全部内容。

2022-06-16 16:24:17 256

原创 《C++性能优化指南》 linux版代码及原理解读 第七章 优化热点语句

本章主要通过介绍函数相关的开销以及不同的函数实现导致的开销,提醒我们在写函数的时候可以根据实际情况灵活的实现函数,从而提高程序的性能。

2022-06-16 16:06:13 547

原创 《C++性能优化指南》 linux版代码及原理解读 第六章 优化动态分配的变量

本章主要通过讲解C++中的变量(变量的生命周期、所有权等),以及变量相关的操作(分配、析构、智能指针托管)所产生的开销对性能的影响等,通过深入介绍相关的流程,解释其中所产生的开销。以及如何从多个方面减少变量所带来的开销,从而对性能进行优化。(通过代码解释为什么智能指针的运行效率可能比普通指针慢几百倍)

2022-05-28 14:40:39 563

原创 《C++性能优化指南》 linux版代码及原理解读 第五章

概述当一个程序的执行时间需要很快的时候,但是实际的执行时间却远远的超出了预期时间好几个量级,这个时候进行优化的方式恐怕只能从算法的层面进行改进。大多数的优化方式对于性能的改善是线性的,但是更高效的算法有时候会使性能呈现指数的增长。本章主要通过常见的几种排序和查找算法,对这个问题进行阐述。

2022-04-26 16:24:41 1941

原创 《C++性能优化指南》 linux版代码及原理解读 第四章

通过案例,我们尝试将一段代码的执行时间从114 优化到2,这样的成果着实让人震惊。本章主要是通过字符串的优化来一步步引导读者深入理解什么是代码优化,以及有哪些启发式的方式。

2022-04-24 22:29:01 1957

原创 《C++性能优化指南》 linux版代码及原理解读 第三章

概述 本章开始讲解如何进行测量,在算法优化的过程中,测量这个步骤是前提,也是一个基础,我们如何判断性能优化的快慢,是通过个人的感觉,或是通过个人的经验,还是用一套准确的工具测量出优化前后的差别呢?如果没有准确的数据支持的话,如果对性能的优化是30%或者50%,那也是很难让人承认的。在本章中,作者主要讲了两种工具,一种是编译器厂商一般都会提供的分析器,如果我们搜索gcc profiler 就会发现有很多中不同的分析器可供我们选择,在下面这个网页中,甚至罗列出了好几种。profiling - ...

2022-04-19 16:25:37 685 2

原创 《C++性能优化指南》 linux版代码及原理解读 第二章

目录概述C++所相信的计算机谎言计算机的真相某些内存访问会比其他的更慢内存容量是有限的,但对于程序来说是无限的流水线停滞程序执行中的多个流调用操作系统的开销是昂贵的C++也会说谎并非所有语句的性能开销都相同语句并非按顺序执行概述本章节主要通过讲解部分计算机硬件的基本知识背景,让读者知道很多时候的计算机的表现并不如结果看起来的那样简单,甚至也不像某些书籍中教导的那样运行。所有这些被广泛使用的计算机都会执行存储在内存中的指令。...

2022-04-17 17:03:31 1477

原创 《C++性能优化指南》 linux版代码及原理解读 第一章

本章主要是从宏观的角度分析为什么要进行性能优化,以及性能优化的几个点。

2022-04-17 12:16:32 1458

原创 <<C++性能优化指南>> linux版代码及原理解读 序

本系列主要是在复读《C++性能优化指南》这本书时用于记录要点的文章

2022-04-17 10:09:41 218

原创 Linux平台应用打包的几种方法(qt/dll --> exec|appimage)

首先,linux平台常用的打包方式,就是通过ldd查看依赖库,然后将依赖库的依赖复制过来,然后写一个脚本,让用户在运行的时候,运行这个脚本,然后这个脚本设置好环境变量(主要是将依赖库添加到环境变量中),这样用户在运行的时候就可以通过运行脚本来运行目标软件了。第一个例子:ldd/path/to/app | cut-d">"-f2 | greplib | cut-d"("-f1 | xargstar-chvfApplib.tar这个会将所有的依赖打包成Appl...

2021-06-22 09:08:02 1391

原创 qt生成库文件之后自动复制到指定目录

目的 qt编译完成一个库之后,自动将这个库复制到指定目录下。Step1: 在Pro文件中添加如下:win32{ CONFIG(release,debug|release){ target.path = DIR\YOU\Want\COPY\TO target.files += DIRPATH\xxx.dll }}INSTALLS += targetStep2: 打开项目的config,make后面添加参...

2021-04-07 20:18:38 2776

原创 QT 通过config指定release和debug模式

在Pro文件中添加如下格式unix { Things to do.}win32{ CONFIG(release,debug|release){ Things to do. }else{ Things to do. }}有两点注意,第一,CONFIG()后面的左大括号要和config在同一行。else后面的大括号同理。5.14.2之前的版本没有处理这个BUG。...

2021-04-07 20:14:40 1297

原创 Error: no override found for ‘vtkRenderWindow‘.出现的原因以及三种解决办法

Error: no override found for 'vtkRenderWindow'.出现的原因以及三种解决办法在Qt添加了QvtkWidget控件之后,如果报错如下:Generic Warning: In /home/allen/soft/pcl_vtk_qt/VTK-8.1.0/Rendering/Core/vtkRenderWindow.cxx, line 43Error: no override found for 'vtkRenderWindow'.首先,出现这个问题的

2021-01-29 14:58:40 3107 1

原创 c++ shared_ptr:从循环引用导致内存泄漏到shared_ptr介绍再到析构流程分析

背景: 在以前的c++的申请内存中,一般是使用new/delete或者malloc/free这两对内存管理操作来实现,但是malloc和new却是有一些区别的,当使用malloc的时候,他是系统提供的函数,它会在堆内申请对应大小的内存,然后返回内存初始地址的一个void*的指针,而如果使用new的话,它是一个操作符,可以由编译器控制,所以在申请一个堆上内存的同时,还会调用所申请对象的一个默认构造函数,反过来,在释放内存的时候也是这样。在使用这种申请/释放内存机制时,就不可避免的会出现几个问题,..

2021-01-04 16:31:29 1049

原创 c++ Vector之erase(导致迭代器失效)vector.erase源码解析

最近偶然遇到了一个问题,某个人和我聊的时候问我,c++的vector如果进行某个元素删除的话,有哪些方法,我给他列举了一个方法,#include <iostream>#include <vector>#include <stdio.h>template <typename T>void showvec(T& vec_){ for(auto &p:vec_) { std::cout<<p

2020-12-31 10:55:12 2552

原创 联想yoga14s 2021Amd版本Ubuntu 系统问题 同样适用与4800H的其他笔记本。

在使用联想yoga14s 2021 Amd版本(以下简称Yoga)的过程中,遇到了一些问题,这里简单记录一下。1重新安装Win10系统之后,联想的触摸板可以用,但是无法无法调节亮度,这时需要安装显卡驱动。其次,没有了野兽模式,这个可以通过在Win10商店搜索 lenovo unility 解决。驱动下载地址:联想驱动官网2安装Ubuntu 系统过程中,卡在Logo界面无法进入,目前觉得可能的问题是,内核5.8之前的版本,对Amd显卡的驱动不支持,所以会出现这种无法进入系统的情况。解决办.

2020-11-20 08:47:26 4937 17

原创 c++ 如何优雅的传递函数以及类成员函数

在一般的方法中,基本上传递函数都是通过传递函数指针的方式来实现。但是最近发现,频繁的传递函数、类成员函数不太是一个好的办法,所以在这里梳理一下常见的几种方法以及如何更方便的传递函数。如果是普通函数的话,一般这样#include <iostream>int add(int a, int b){ return a + b;}int main(){ int (*func) (int, int); func = add; std::cout << "func.

2020-10-21 14:52:05 6968

原创 QVTK 添加Sphere 设置SetRenderWindow

本想在Qvtk中添加一个图形,本想直接添加个图形进去就行了,但是我需要做一个鼠标交互事件,所以查阅资料之后发现需要使用到RenderWindow以及renderWindowInteractor来重新实现某些交互事件,所以我就将图形添加到actor中,然后actor加入到renderer中,最后使用QVTK的SetRenderWindow函数将其导向设置好的RenderWindow上,接下来正常显示。demo代码:#include "mainwindow.h"#include "ui_mainwi

2020-10-19 15:42:38 1721

原创 Qt捕捉窗口关闭事件

今天在Qt开发过程中遇到一个问题,本来我想在窗口关闭的时候将配置写入文件中,于是我将操作放入了默认的析构函数中,结果在窗口关闭之后,析构函数并不执行,所以我转而使用窗口关闭事件,来触发我想执行的操作。我写的类是继承自QWidget,class setting : public QWidget它所包含的默认的信号函数只有这几个:并没有我能用到的函数。从网上查找了一下,发现可以通过继承QWidget默认的虚函数closeEvent(QCloseEvent* event);来实现窗口关.

2020-10-09 10:35:14 3778

原创 Windows VTK-8.1 未能正确加载解决方案中的一个或多个项目

在上一篇文章中 使用如下的方案生成VTK的CMAKE文件时VTK_Group_Qt ONVTK_QT_VERSION 5 # by default 4Qt5_DIR D:/Qt/Qt5.9.9/5.9.9/msvc2017_64/lib/cmake/Qt5CMAKE_INSTALL_PREFIX C:/Program Files/VTK # by defaultBUILD_SHARED_LIBS ONCMAKE_CONFIGURATION_TYPES Release # ...

2020-09-27 11:15:33 662

原创 PCL1.9.1 VTK8.1.0 vtkoutputWindow最全解决办法

使用Qt编译程序的时候,VTK一直弹窗如下:现有的解决方法:第一种方法在main文件之上添加如下代码:#include "QtGuiApplication5.h"#include <QtWidgets/QApplication>#include "vtkoutputwindow.h" //加入 int main(int argc, char *argv[]) {vtkOutputWindow::SetGlobalWarningDisplay(0); //加入

2020-09-25 10:38:28 2404 10

原创 PCD点云文件框选代码

背景:PCL + VTK项目地址:https://github.com/dezbracaty/PCD_Area_cut_tool后期添加其他功能maybe通过PVL_VISUALIZATION显示点云图像,然后通过按X进入框选模式,然后接受PCL::VISUALIZATION返回的点云索引,然后通过索引将所选择的点云文件导出。函数介绍:pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PC.

2020-09-24 09:56:59 1067 1

pcl_1.9.1_pcl_visualization_release_no_vtkoutputwindow_dll

使用此文件替换pcl1.9.1安装目录/bin/下的对应文件,然后重新编译程序即可。注意将文件名后面的_no_warning删除

2020-09-25

数据包及相关资源.txt

文档包含: ros数据包: 使用velodyne 3D激光录制的厂房数据,其中包括激光以及里程计数据 launch文件:使用数据包进行hector_slam建图所需的launch文件以及文件使用说明

2020-03-26

Kubuntu最新内核版本

适用于Amd 系列笔记本,可以直接启动运行。解决蓝牙驱动、显卡驱动、声音驱动等等问题。其中有5.9.8和5.10.rc4两个版本的内核,系统都是Kubuntu20,04

2020-11-20

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

TA关注的人

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