贴几个链接。

在Qt Designer里集成

要实现QVTKWidget在Qt Designer里像Qt的其他标准控件一样拖来拖去,需要把编译生成的QVTKWidgetPlugin.dll/QVTKWidgetPlugin.lib(Release版本) 复制到Qt的安装目录里的plugins\designer目录下。完了以后,你会在Qt Designer里面看到如下的控件:很重要!

1、VTK-6.3.0编译(支持Qt编程)以及QVTKwidget插件安装

https://blog.csdn.net/cfqcfqcfqcfqcfq/article/details/51735895

VTK和QT整合读取图片中的一些问题

就是把Debug改为Release,然后ALL BUILD生成,INSTALL仅用于项目仅生成INSTALL,然后就可以生成Release版本的,链接里有插件安装过程。

 

2、VS2010+VTK6.1+QT5 编译安装教程二 测试

https://blog.csdn.net/u011017966/article/details/42031609

我是用的这篇里面的代码做的测试,刚安好VTK想测试一下,照着网友的程序做的,没有给main.c文件,所以编译总是出现: error LNK2019: 无法解析的外部符号 _main,该符号在函数 _xxxx 中被引用,弄了一下午总算找到了能解决的方法,试了很多办法,最后发现是main.c是空的。心累。中间还遇到 错误1error C2039: “statusBar”: 不是“Ui::TestQTWithVTKClass”的成员, ui.statusBar->showMessage(str);最后发现我再Ui设计里的名称是statusbar,就是一个小小的字母错了搞了大半天,真是被自己蠢哭,主要还是对这些一窍不通,纯小白,慢慢修炼吧。

还有读取图片的格式,BMP的图打开总是出错,没找到原因,所以就用了JPEG,总算能显示了。

#include <vtkBMPReader.h>
#include <vtkJPEGReader.h>

VTK和QT整合读取图片中的一些问题

3、vs2013+qt5.51+vtk 实现的 双view,显示并联动操作

https://blog.csdn.net/dd_lucky/article/details/82493930

4、错误处理

MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 [email protected]

https://blog.csdn.net/shenziheng1/article/details/53188168

5、基于VTK的Qt应用程序开发(参考教学东灵工作室的教程

https://blog.csdn.net/www_doling_net/article/details/8668870#commentBox

6、main.c++文件

#include "testqtwithvtk.h"
#include <QTextCodec>
 
//程序发布时,可以不要注释以下语句,编译的时候就不会带控制台输出窗口
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )
 
int main( int argc, char **argv ) 
{
    QApplication *app = new QApplication(argc, argv);
    TestQTWithVTK *window = new TestQTWithVTK();
    window->show();
    return app->exec();

};

7、testqtwithvtk.cpp

#include "testqtwithvtk.h"
#include <QFileDialog>
#include <QDir>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkImageViewer2.h>
#include <QVTKWidget.h>
#include <vtkBMPReader.h>
#include <vtkJPEGReader.h>
#include <vtkImageActor.h>
#include "vtkEventQtSlotConnect.h"
#include "vtkCommand.h"

 
TestQTWithVTK::TestQTWithVTK(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	m_pImageViewer  = vtkSmartPointer< vtkImageViewer2 >::New();
    m_pRenderder    = vtkSmartPointer< vtkRenderer >::New();
	m_Connections = vtkEventQtSlotConnect::New();
 
	// 
	ui.qvtkWidget->GetRenderWindow()->AddRenderer(m_pRenderder);
	// 
	connect(ui.actionOpen, SIGNAL( triggered() ), this, SLOT( onOpenSlot() ) );
 
	m_Connections->Connect(ui.qvtkWidget->GetRenderWindow()->GetInteractor(),
              vtkCommand::MouseMoveEvent,
              this,
              SLOT(updateCoords(vtkObject*)));
 
}
 
TestQTWithVTK::~TestQTWithVTK()
{
	m_Connections->Delete();
}
 
 
void TestQTWithVTK::onOpenSlot()
{
       QString filter;
       filter = "JPEG image file (*.jpg *.jpeg)";
 
       QDir dir;
       QString fileName = QFileDialog::getOpenFileName( this, 
                                 QString(tr("打开图像")), dir.absolutePath() , filter );
       if ( fileName.isEmpty() == true ) return;
 
       //
       QByteArray ba = fileName.toLocal8Bit();
       const char *fileName_str = ba.data();
 
       // 
       vtkSmartPointer<vtkJPEGReader> reader = vtkSmartPointer<vtkJPEGReader>::New();
       reader->SetFileName(fileName_str);
 
       // 
	   m_pImageViewer->SetInputConnection(reader->GetOutputPort());
       //m_pImageViewer->UpdateDisplayExtent();
       m_pImageViewer->SetRenderWindow(ui.qvtkWidget->GetRenderWindow());
       m_pImageViewer->SetRenderer(m_pRenderder);
       m_pImageViewer->SetupInteractor(ui.qvtkWidget->GetRenderWindow()->GetInteractor());
       m_pImageViewer->SetSliceOrientationToXY(); 
       m_pImageViewer->GetImageActor()->InterpolateOff();
       m_pRenderder->ResetCamera();
       m_pRenderder->DrawOn();
      ui.qvtkWidget->GetRenderWindow()->Render();
}
 
 
void TestQTWithVTK::updateCoords(vtkObject* obj)
{
       
       vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::SafeDownCast(obj);
 
       
       int event_pos[2];
       iren->GetEventPosition(event_pos);
 
       QString str;
       str.sprintf("x=%d : y=%d", event_pos[0], event_pos[1]);
	   ui.statusbar->showMessage(str);
}

8、testqtwithvtk.h

#ifndef TESTQTWITHVTK_H
#define TESTQTWITHVTK_H

#include <QtWidgets/QMainWindow>
#include "ui_testqtwithvtk.h"
#include "vtkSmartPointer.h"
class vtkImageViewer2;
class vtkRenderer;
class vtkEventQtSlotConnect;
class TestQTWithVTK : public QMainWindow
{
	Q_OBJECT

public:
	TestQTWithVTK(QWidget *parent = 0);
	~TestQTWithVTK();

private:
	Ui::TestQTWithVTKClass ui;
private slots:
       //响应打开图像文件的槽函数
       void onOpenSlot();
private:
       vtkSmartPointer< vtkImageViewer2 > m_pImageViewer;
       vtkSmartPointer< vtkRenderer > m_pRenderder;
private slots:
       //响应鼠标移动的消息,实时输出鼠标的当前位置
       void updateCoords(vtkObject* obj);
 
private:
       vtkEventQtSlotConnect* m_Connections;
};

#endif // TESTQTWITHVTK_H

最后的效果:

VTK和QT整合读取图片中的一些问题

 

相关文章: