【VS2019 Qt5 VTK9.2】界面编程问题&解决记录

一、Qt和VTK相关问题及解决

1. Widget和Viewer的设置顺序

 imageViewer->SetupInteractor(renderWindow->GetInteractor());
 ui.qvtkWidget->setRenderWindow(imageViewer->GetRenderWindow());

二者顺序决定了能否正确显示。
参考:QVTKWidget和vtkImageViewer2结合编程设置顺序问题

2. 控件提升

因为版本问题无法找到QVTKWidget时,可以考虑控件提升:
将一个widget 提升为QVTKOpenGLNativeWidget
参考:QT5.14.2配置QVTKOpenGLNativeWidget控件并在QT中显示VTK窗口

(但还是建议根据对应版本直接使用QVTKOpenGLNativeWidget及其新功能。)

3. QVTKWidget、QVTKOpenGLNativeWidget版本区别

版本参考
参考:PCL1.12.1+VTK9.1+Qt5.14.2VS创建Qt项目在widget上显示点云

4. 定义vtkGenericOpenGLRenderWindow

报错:QVTKOpenGLNativeWidget requires a vtkGenericOpenGLRenderWindow.
vtkWin32OpenGLRenderWindow is not supported.

在这里插入图片描述
文档说到QOpenGLWidget subclass to house a vtkGenericOpenGLRenderWindow in a Qt application,即QVTKOpenGLNativeWidget 是QOpenGLWidget 的子类,需要在Qt中容纳一个vtkGenericOpenGLRenderWindow 渲染窗口。
(建议直接在窗口定义就定义为vtkGenericOpenGLRenderWindow渲染窗口。)

二、VS报错

5. LNK2005 "public: static class …"已经在 …obj 中定义

错误	LNK2005	"public: static class myVtkInteractorStyleImage * __cdecl myVtkInteractorStyleImage::New(void)" (?New@myVtkInteractorStyleImage@@SAPEAV1@XZ) 已经在 mainwindow.obj 中定义	

参考:静态成员变量初始化问题。关于 error LNK2005 static int:已经在***.obj中定义。

主要原因有以下三种:

1.重复定义全局变量;

2.头文件的包含重复;

3.使用第三方的库造成的。

6. LNK2019 无法解析的外部符号

参考:vs报错“错误 LNK2019 无法解析的外部符号”的几种原因及解决方案

(常见的可能原因:所使用的外部库未正确添加到项目中来。)
直接解决:更新CMakeLists 或者 “打开项目->属性->配置属性”添加库目录或文件

7. 报错:QObject::connect: No such slot或者QObject::connect: No such signal

参考:QObject::connect: No such slot或者QObject::connect: No such signal
两个原因导致:

1.传递参数的时候不能带变量名,只能含有变量类型

connect(objectA,SIGNAL(signal_1(int)),objectB,SLOT(slot_test(int)));

在这里插入图片描述

2.类中必须包含Q_OBJECT

在这里插入图片描述
另:
QT的默认槽函数 connectSlotsByName

只要槽函数名规则是这样的:on_子对象名_信号名,如:

public slots:
   void on_actionNew_triggered();

就可以不用写connect函数来连接信号和槽了,需注意不要重复命名或多次重复连接

参考:QT 默认槽函数 connectSlotsByName浅析

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值