Qt不使用VTK库

时间:2015-12-27 18:37:57

标签: c++ qt vtk

您好stackoverflow系列

我试图让vtk使用qt。我应该承认我是新手,所以放轻松。我试图为自己学习c ++,并选择了以下配置来帮助我入门;

操作系统:Windows 7终极版 工具包:QT 5.3.2
IDE:QT Creator 3.2.1
VTK:6.3.0

我将VTK下载并解压缩到" C:\ vtk-6.3.0"在我的电脑上。我按照VTK's website上给出的说明用cmake构建了VTK。我给了cmake源的位置" C:/vtk-6.3.0"并指定了一个构建库的地方" C:/ vtk / bin"。

认为一切都进展顺利,我继续用最简单的例子,我可以逃避,一个没有ui的例子。我从here

得到了例子

RenderWindowNoUiFile.cxx

#include <QApplication>

#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>

#include <QVTKWidget.h>

int main(int argc, char** argv)
{
  QApplication app(argc, argv);

  QVTKWidget widget;
  widget.resize( 256, 256 );

  vtkSmartPointer<vtkSphereSource> sphereSource =
      vtkSmartPointer<vtkSphereSource>::New();

  vtkSmartPointer<vtkPolyDataMapper> sphereMapper =
      vtkSmartPointer<vtkPolyDataMapper>::New();
  sphereMapper->SetInputConnection( sphereSource->GetOutputPort() );

  vtkSmartPointer<vtkActor> sphereActor =
      vtkSmartPointer<vtkActor>::New();
  sphereActor->SetMapper( sphereMapper );

  vtkSmartPointer<vtkRenderer> renderer =
      vtkSmartPointer<vtkRenderer>::New();
  renderer->AddActor( sphereActor );

  widget.GetRenderWindow()->AddRenderer( renderer );
  widget.show();

  app.exec();

  return EXIT_SUCCESS;
}

我手动添加了我的.pro文件

RenderWindowNoUiFile.pro

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = RenderWindowNoUiFile
TEMPLATE = app


SOURCES += RenderWindowNoUiFile.cxx
INCLUDEPATH += C:\VTK\bin

我发现qt已经强调了所有的头文件,当我运行程序时出现了错误

Projects\RenderWindowNoUiFile\RenderWindowNoUiFile.cxx:3: error: vtkSmartPointer.h: No such file or directory
 #include <vtkSmartPointer.h>
                             ^

请问我做错了什么? 当我搜索任何头文件时,我发现每个头文件位于&#34; C:\ vtk \ bin&#34;或者&#34; C:\ vtk-6.3.0&#34;夹。 请问我该如何解决这个问题?我可以将所有头文件放在一个文件夹中,以便我可以在.pro文件中引用它吗? 例如,如果我可以在名为&#34; C:\ vtk \ header&#34;的目录中获取所有头文件,那么我可以在我的.pro文件中将其引用为INCLUDEPATH += C:\vtk\header

2 个答案:

答案 0 :(得分:1)

您可以通过评论触及它&#34;我可以在一个目录中获取所有标题&#34;这是设置INCLUDEPATH,但你设置错误。

您正在做的事情有几个问题。

  • 首先,您的INCLUDEPATH不正确。它应该设置为&#34; include&#34;您已安装的文件的目录。

  • 其次,您还没有在您的构建中包含该库 - 因此,即使您的包含文件已解决,也会出现链接错误。这是因为您还没有指定二进制库文件的位置。

  • 第三,您没有指定您的VTK构建是静态还是动态。我认为这是动态的。如果您不知道这意味着什么,请仔细查看。最大的区别是:您是否还需要将.dll文件复制到运行程序的位置。如果你有动态,答案是肯定的。

关于安装目标的注释:使用cmake,您可以设置一个选项来更改安装目标的位置。所以这个过程与cmake相似:

1)将源解压缩到您喜欢的目录。

2)运行cmake build文件夹(您设置为bin)。你所做的是令人困惑,因为build文件夹将包含所有内容:不仅仅是二进制文件,还有标题和其他安装内容。我通常称之为&#34; build&#34;

3)一旦cmake配置,它可能会提示更多配置。您可以在此处为VTK配置Qt。在这一步中,你告诉cmake Qt cmake文件夹在哪里,以便你可以配置VTK来构建Qt东西

4)现在您可以更改默认安装路径。默认情况下,当您使用visual studio构建INSTALL项目时(我将在下面进行描述),它会安装在程序文件中的某个位置。您可以通过将CMAKE_INSTALL_PREFIX设置为您想要的任何内容来更改此设置。例如:C:\ VTK \ install

5)单击generate生成visual studio项目文件或Make文件,具体取决于您的构建配置。

6)对于visual studio:在build目录中打开解决方案并构建所有。完成后,要安装文件(#4),请运行INSTALL项目。

7)对于Make文件:运行make(如果你有多个核心,使用-jX,其中X是两倍核心数),然后进行安装(不要在make install中使用-j)

好的,此时您已经编译并安装了VTK发行版。现在,您应该在Qt .pro文件中修复路径。

例如:

INSTALLPATH+=C:/VTK/install/include

我不知道你需要哪些库,但在下面你应该看到模式:

LIBS+=-LC:/VTK/install/lib \
      -lvtkRenderingCore-6.3

此后,由于您有动态构建,因此需要复制从Qt项目创建的exe文件旁边的.dll文件。

祝你好运!

答案 1 :(得分:0)

如果你使用mingw和qt,你必须用你知道的mingw来编译vtk的源代码。在那个网页中他们使用vs所以我想警告你。当你使用cmake配置vtk源时你应该检查“ Module_vtkGUISupportQt“和”Module_vtkGUISupportQtOpenGL“选项可以使用qt.Also你必须在Run&amp;在Qt中构建选项,例如选择编译器,工具包等。

请注意,选择在库发布日期之后发布的编译器(在本例中为vtk)可能会使您免于遭受太多错误。