近期工作中一些小问题的整理

整理了两个工作中遇到的小问题,备忘~

1、在Qt Creator的开发环境下,当添加现有的头文件或者cpp文件后,重新qmake会发现,窗口左下角的编译和运行按钮都变灰。这是因为项目添加了新的文件后,在pro文件中会新增对应的文件名信息。而添加的文件名信息的文本会有点问题导致出现这一现象。(如下图,添加了mdetect.h文件后,编译和运行按钮都变灰)

 

解决方法是:在pro文件中找到对应的新添加的文件名信息,在它后面敲一个空格再退一格(看起来并没有改变什么,但确实有用,具体原因不太清楚),重新qmake之后就解决了。

2、在qt窗口中添加vtk窗口控件用于显示点云

(1)在qt的设计界面中,在窗口中添加一个qt的Widget控件,并把其名字改为qvtkwidget(后面要用到该名字,前后对应即可),如下图。

 

(2)在右侧属性框中,对该widget控件的类实现提升——如下图所示,右键“qvtkwidget”右侧的“QWidget”处,点击“提升为”,在弹出的对话框中,“提升的类名称”填写QVTKWidget,点击“添加”按钮后再点击提升按钮,如下下图。。

 

 

(3)做完以上两步,窗口中的设计就完成了。接下来需要用到一个自定义的类——visualizer。这是师兄编写的,直接拿来用。在项目中添加visualizer.h和visualizer.cpp文件,包含该头文件。如下图

 

(4)在窗口类的头文件中,定义一以下几个变量,并且在该窗口类的构造函数中加入下面一段初始化代码。

 
    vtkSmartPointer<vtkRenderer> myRenderer;        vtkSmartPointer<vtkRenderWindow> myRenderWindow;        vtkSmartPointer<vtkRenderWindowInteractor> myInteractor;        vtkSmartPointer<vtkEventQtSlotConnect> m_connection;        boost::shared_ptr<visualizer> viewer; //可视化类
 
 
 

下面是加到构造函数中的代码:

 
//初始化vtk相关变量//myRenderer=vtkSmartPointer<vtkRenderer>::New();      myRenderWindow=vtkSmartPointer<vtkRenderWindow>::New(); myInteractor=vtkSmartPointer<vtkRenderWindowInteractor>::New();m_connection=vtkSmartPointer<vtkEventQtSlotConnect>::New(); myRenderWindow->AddRenderer(myRenderer);        ui->qvtkwidget->SetRenderWindow(myRenderWindow);        myRenderer->SetBackground(0.1,0.1,0.1);    //初始化显示窗口    //initialVtkWidget();        //将Viewer与qvtkwidget关联//      viewer.reset(new visualizer);        viewer->setRenderer(myRenderer);
 

(5)上面完成了vtk点云显示窗口的初始化。viewer变量就是一个可以实现点云显示的变量(类型是自定义的类visualizer)。根据该自定义类中的不同成员函数,可以实现几个自定义的功能。

(6)实现将点云数据显示到该窗口中的操作如下:

 
//显示点云到界面的窗口中QString f_FileName="f point cloud";  double color[]={1,1,1};   viewer->addPointCloudXYZ(front_cloud,color,f_FileName);  //    myRenderer->ResetCamera();   ui->qvtkwidget->update();
 

此处用到了成员函数addPointCloudXYZ(),需要三个参数,分别是要显示的点云的指针,颜色,以及id。详细信息可以看visualizer类的具体定义。

另外,如果要清楚窗口中的点云数据,应该可以用removePointCloud这个成员函数。

(7)重要的一点:

在操作时,按照上述步骤完成后,程序生成没有问题,但是在编译和运行的时候,会提示如下图所示的问题

 

解决方法为:

添加如下一段代码:

 
#include <vtkAutoInit.h>VTK_MODULE_INIT(vtkRenderingOpenGL);VTK_MODULE_INIT(vtkInteractionStyle);
 

至此,便大体实现了相关功能。至于具体可能出现的问题以及其他的相关功能,再具体分析即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>