目录
- 1.VS中双击Ui文件无法打开
- 2.VTK9.0以后在Qt Designer中找不到QVTKWidget组件
- 3.无法打开 源 文件 "QVTKOpenGLNativeWidget.h"
- 4.无法打开 源 文件 "QOpenGLWidget"
- 5.QWidget:Must construct a QApplication before a QWidget
- 6.无法打开 源 文件 "QtWidgets/QApplication"
- 7.设置环境变量 TRACEDESIGNTIME = true 并重启 Visual Studio 以进行调查。
- 8.This file was generated using the moc from 5.15.0. It
- 参考
本人仅使用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