首页 > 其他分享 >Qt+vs2019+PCL1.12.1+VTK9.1环境搭建中的相关问题

Qt+vs2019+PCL1.12.1+VTK9.1环境搭建中的相关问题

时间:2024-03-19 19:32:38浏览次数:46  
标签:文件 PCL1.12 QVTKOpenGLNativeWidget Qt vs2019 onlystandard include e1

目录


本人仅使用VS2019创建使用Qt显示点云程序,对Qt了解甚少,以下问题的解决方式为尝试过程中采取的可行方案,仅供参考

前提:使用VS创建“Qt Widget Application”,Qt6,如无特别说明,均为此类项目。

1.VS中双击Ui文件无法打开

在这里插入图片描述
解决途径:拓展->Qt VS Tools->Options->General->Qt Designer->Run in detached windows改为true
解释:使用Qt Designer在新窗口编辑ui文件。

2.VTK9.0以后在Qt Designer中找不到QVTKWidget组件

参考:QT5+VTK9.1最新配置方法_qt vtk-CSDN博客

3.无法打开 源 文件 “QVTKOpenGLNativeWidget.h”

使用上述方法对QWidget或者OPenGLWidget提升为QVTKOpenGLNativeWidget后提示下述问题,但通过everything可以查找到这个文件:

严重性	代码	说明	项目	文件	行	禁止显示状态
错误(活动)	E1696	无法打开 源 文件 "QVTKOpenGLNativeWidget.h"	e1	D:\VScodeset\exercise\e1\x64\Debug\uic\ui_e1.h	12	

严重性	代码	说明	项目	文件	行	禁止显示状态
错误(活动)	E0020	未定义标识符 "QVTKOpenGLNativeWidget"	e1	D:\VScodeset\exercise\e1\x64\Debug\uic\ui_e1.h	27	
严重性	代码	说明	项目	文件	行	禁止显示状态
错误	C1083	无法打开包括文件: “QVTKOpenGLNativeWidget.h”: No such file or directory (编译源文件 e1.cpp)	e1	D:\VScodeset\exercise\e1\x64\Debug\uic\ui_e1.h	12	

严重性	代码	说明	项目	文件	行	禁止显示状态
错误	C1083	无法打开包括文件: “QVTKOpenGLNativeWidget.h”: No such file or directory (编译源文件 main.cpp)	e1	D:\VScodeset\exercise\e1\x64\Debug\uic\ui_e1.h	12	

解决方式:添加完整的VTK环境,这里说一下,安装PCL会同时安装VTK,但该VTK不是完整的,需要自行编译,即PCL的属性配置文件可以用到这里来。

4.无法打开 源 文件 “QOpenGLWidget”

使用上述方法对QWidget或者OPenGLWidget提升为QVTKOpenGLNativeWidget,并添加完整VTK依赖后提示下述问题,

严重性	代码	说明	项目	文件	行	禁止显示状态
错误(活动)	E1696	无法打开 源 文件 "QOpenGLWidget"	e1	D:\sourcecodestore\PCL 1.12.1\3rdParty\VTK\include\vtk-9.1\QVTKOpenGLNativeWidget.h	106	
严重性	代码	说明	项目	文件	行	禁止显示状态
错误	C1083	无法打开包括文件: “QOpenGLWidget”: No such file or directory (编译源文件 main.cpp)	e1	D:\sourcecodestore\PCL 1.12.1\3rdParty\VTK\include\vtk-9.1\QVTKOpenGLNativeWidget.h	106	

解决方式:参考这篇文章,QT6 + VS2022 中关于 OpenGL 的问题 - 知乎 (zhihu.com)
VS2019生成的项目中并没有.pro文件,因此有些文章说的修改pro文件,并不一定适合本问题,可以让项目成功生成的方式有两种:1,如参考文章所说添加QT += openglwidgets
在这里插入图片描述
2,在Qt中添加Qt Opengl和Qt OpenglWidgets
在这里插入图片描述
但上述两种方式都没能成功运行,都会引发同一个问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.QWidget:Must construct a QApplication before a QWidget

使用上述方法对QWidget或者OPenGLWidget提升为QVTKOpenGLNativeWidget,并添加完整VTK依赖,接着问题4的方式在Qt中添加Qt Opengl和Qt OpenglWidgets,并且添加5.15.0的msvc环境变量

D:\qt-x64-4.7.0\5.15.0\msvc2019_64\bin

问题4中缺少的3个dll文件缺失错误不再发生,转为一个新错误:
在这里插入图片描述
推测可能原因:编译VTK时使用的Qt是Qt5(使用的VTK不是自己编译的,详见第一个参考链接
解释:创建Qt5项目,添加Qt Opengl和Qt OpenglWidgets Modules,添加完整VTK依赖,对QWidgett提升为QVTKOpenGLNativeWidget,重命名为qvtkwidget,在窗口cpp中添加如下代码:

//QtWidgetsApplication10.cpp
#include "QtWidgetsApplication10.h"
#include <qopengl.h>
#include <qopenglwidget.h>
#include <qpainter.h>
#include <qdebug.h>
#include <pcl/common/io.h>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/obj_io.h>
#include <pcl/PolygonMesh.h>
#include <pcl/point_cloud.h>
#include <pcl/io/vtk_lib_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/common/common_headers.h>
#include <pcl/features/normal_3d.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/console/parse.h>
#include <pcl/io/ply_io.h>
#include <vtkRenderWindow.h>
#include <QVTKRenderWidget.h>
#include <QVTKOpenGLNativeWidget.h>
#include <vtkGenericOpenGLRenderWindow.h>//这个必须加
QtWidgetsApplication10::QtWidgetsApplication10(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
	//显示点云
	 //初始化点云
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::io::loadPCDFile("rabbit.pcd", *cloud);  //使用点云文件 pcb

	//创建渲染器
	vtkRenderer* ren = vtkRenderer::New();
	//创建渲染窗口
	vtkGenericOpenGLRenderWindow* renderWindow = vtkGenericOpenGLRenderWindow::New();
	//创建pcl显示器并与VTK的渲染器和渲染窗口绑定
	pcl::visualization::PCLVisualizer::Ptr pclViewer(new pcl::visualization::PCLVisualizer(ren, renderWindow, "viewer", false));
	//渲染窗口与qvtkWidget绑定
	ui.qvtkwidget->setRenderWindow(pclViewer->getRenderWindow());
	//添加点云数据
	pclViewer->addPointCloud(cloud, "cloud");
	//刷新控件(如果是第一次载入点云,点云没有变更,可以不加下面这句)
	ui.qvtkwidget->update();
}
QtWidgetsApplication10::~QtWidgetsApplication10()
{}

运行结果
在这里插入图片描述
点云成功显示在Qt窗口中

6.无法打开 源 文件 “QtWidgets/QApplication”

严重性	代码	说明	项目	文件	行	禁止显示状态
错误		ERROR running qmake
qmake: (D:/qt-x64-4.7.0/5.15.0/msvc2019_64/bin/qmake)
qmake: $PWD=D:\VScodeset\exercise\onlystandard\x64\Debug\qmake\temp
qmake: Project ERROR: Unknown module(s) in QT: openglwidgets
qmake: Error creating .vcxproj file
	onlystandard	D:\VScodeset\exercise\onlystandard\onlystandard.vcxproj	1	

严重性	代码	说明	项目	文件	行	禁止显示状态
错误(活动)	E1696	无法打开 源 文件 "QtWidgets/QApplication"	onlystandard	D:\VScodeset\exercise\onlystandard\main.cpp	2	

严重性	代码	说明	项目	文件	行	禁止显示状态
错误(活动)	E1696	无法打开 源 文件 "QtWidgets/QMainWindow"	onlystandard	D:\VScodeset\exercise\onlystandard\onlystandard.h	3	

严重性	代码	说明	项目	文件	行	禁止显示状态
错误(活动)	E1696	无法打开 源 文件 "ui_onlystandard.h"	onlystandard	D:\VScodeset\exercise\onlystandard\onlystandard.h	4	

使用Qt6创建项目,但是使用Qt5的msvc或者使用Qt5创建项目,使用Qt6的msvc使会出现此问题。
在这里插入图片描述
解决方式:更改对应的msvc版本
在这里插入图片描述

7.设置环境变量 TRACEDESIGNTIME = true 并重启 Visual Studio 以进行调查。

错误 : 项目“D:\VScodeset\exercise\QtWidgetsApplication11\QtWidgetsApplication11.vcxproj”配置“Debug | x64”的 Designtime 生成失败。IntelliSense 可能不可用。
设置环境变量 TRACEDESIGNTIME = true 并重启 Visual Studio 以进行调查。

和上个问题一样,只不过是在输出窗口的解决方案下显示的,解决方案同上。
在这里插入图片描述

8.This file was generated using the moc from 5.15.0. It

严重性	代码	说明	项目	文件	行	禁止显示状态
错误	C1189	#error:  "This file was generated using the moc from 5.15.0. It"	QtWidgetsApplication10	D:\VScodeset\exercise\QtWidgetsApplication10\Q5.cpp	16	

解决方式:一句话,使用了Qt5.15.0的moc生成的moc_ * .cpp用到了版本不匹配的Qt项目中。但使用VS生成Qt项目的过程中,用户不需要关心moc,VS会自行调用并生成对应的 moc_ * .cpp文件,在项目的Debug目录下可以找到。
在这里插入图片描述

参考

VS2019+PCL1.12.1+Qt5.14.2编译VTK9.1(苦尽甘来系列)

标签:文件,PCL1.12,QVTKOpenGLNativeWidget,Qt,vs2019,onlystandard,include,e1
From: https://blog.csdn.net/m0_53217734/article/details/136852206

相关文章

  • 020_若依框架集成MQTT
    目录什么是MQTT什么是EMQMQTTX下载使用下载使用若依集成MQTT拉取若依单应用版本pom.xml导入mqtt依赖yml文件配置mqtt拷贝mqtt相关代码MqttConfigPushCallbackMqttPushClient测试订阅接收消息测试发布消息订阅接收消息存入数据库什么是MQTTMQTT_百度百科什么是EMQEMQX_百度......
  • QT中实现接收拖拽文件
    Qt中实现接收拖拽文件的功能主要涉及到QDragEnterEvent、QDropEvent和QMimeData等类的使用。1.启用拖拽支持:  在Qt窗口或控件启用拖拽支持,通过设置窗口或控件的acceptDrops属性为true来实现。2.重写dragEnterEvent:  重写dragEnterEvent函数,以便在拖拽操作进......
  • Qt UI项目参考
    QtFluentDesign-main原始界面: 应用了Fluent风格: Navigation-Bar-Office-Style-Tab-Bar-master侧边栏展开: 侧边栏折叠: qt-material-widgets-master    qt-UI-master[and]QSSHub-master[and]QDarkStyleSheet-master[and]qt-material-stylesheet-maste......
  • PyQt5 GUI编程
    一.PyQt5简介PyQt5是一个用于创建图形用户界面(GUI)应用程序的跨平台工具集,它将Qt库(广泛用于C++编程语言中创建丰富的GUI应用程序)的功能包装给Python使用者。PyQt5是由RiverbankComputing开发的,并且可以在所有主流操作系统上运行,包含Windows、macOS和Linux。PyQt5包括了超过620个......
  • Qt 编译qt-material-widgets皮肤的方法
    编译qt-material-widgets皮肤的方法首先qt-material-widgets的源代码直接拉下来是无法编译的,我们只能根据报错一步步寻找如何编译。1.必须先编译components项目得到lib文件2.然后编译examples,但是发现编译失败3.因为在examples,pro默认为linux库,修改其中内容,libcomponents.a......
  • Qt 布局中控件重叠、挤压的解决方法
    问题描述:在QtDesigner中设计布局时,对所有控件使用QGridLayout、QHBoxLayout或QVBoxLayout布局设置。可以正常预览(Preview),但C++编译后,所有控件挤到一起,布局设置失效。问题解析:预览时正常,说明不是Qt的问题,应该与C++代码有关。问题解决:查看与ui关联的代码,发现这个......
  • Qt QScrollArea滚动条不出现问题
    问题在做仿B站标签创建框时候,用到了ScrollArea,平时这个控件很少用,所以这次使用时候又遇到了滚动问题。我直接往scroll里丢了一个layout,但是无论我layout怎么撑大,scroll始终没有出现滚动条。所以我试着打印scroll内部的widget的size,结果直接报错。1QScrollAreaarea=newQ......
  • 【QT+QGIS跨平台编译】之八十二:【QGIS_Gui跨平台编译】—【错误处理:QgsExpressionCont
    文章目录一、未定义基类QgsExpressionContextGenerator二、错误处理一、未定义基类QgsExpressionContextGenerator报错信息二、错误处理第33行增加:#include"qgsexpressioncontextgenerator.h"......
  • qt内存管理
    #include"mainwindow.h"#include"ui_mainwindow.h"#include<QDebug>MainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::MainWindow){ui->setupUi(this);}MainWindow::~MainWindow(){d......
  • Qt QTableWidget 设置列宽行高大小的几种方式及其他常用属性设置
    效果:1.列宽、行高自动分配1//列宽自动分配2tableWidget.horizontalHeader().sectionResizeMode(QHeaderView::Stretch)3//行高自动分配4tableWidget.verticalHeader().SectionResizeMode(QHeaderView::Stretch)2.固定值tableWidget.horizontalHeader().SectionResi......