嗨stackoverflow系列
我正在尝试让vtk与qt一起工作。我应该承认我是新手,所以轻松一点。我正在尝试自己学习c++,并选择了以下配置来使我入门。
操作系统:Windows 7 Ultimate
工具箱: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>
                             ^
请我做错了什么?
当我搜索任何头文件时,会在“C:\ vtk \ bin”或“C:\ vtk-6.3.0”文件夹中的不同位置找到它们。
请如何解决这个问题?我可以将所有头文件放在一个文件夹中,以便可以在.pro文件中引用它吗?
例如,如果我可以在名为“C:\ vtk \ header”的目录中获取所有头文件,则可以在我的.pro文件中将其称为INCLUDEPATH += C:\vtk\header

最佳答案

您的注释有点触动了它,“我可以将所有标题放在一个目录中吗?”这是设置INCLUDEPATH,但是您没有正确设置它。

您在做什么有一些问题。

  • 首先,您的INCLUDEPATH不正确。应该将其设置为已安装文件的“include”目录。
  • 其次,您没有将库包含在您的构建中-因此,即使您的包含文件已解析,也会出现链接错误。这是因为尚未指定二进制库文件的位置。
  • 第三,您没有指定VTK构建是静态还是动态的。我假设这是动态的。如果您不知道这意味着什么,请查收。最大的不同是:是否还需要将.dll文件复制到运行程序的位置。如果您有动力,答案是肯定的。

  • 关于注释,请选择安装目标:使用cmake,您可以设置一个选项来更改将二进制文件安装到的位置。因此,使用cmake的过程如下:

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

    2)运行cmake构建文件夹(您将其设置为bin)。您所做的工作令人困惑,因为build文件夹将包含所有内容:不仅包含二进制文件,还包含 header 和其他安装内容。我通常称其为“构建”

    3)cmake配置完成后,可能会提示您进行更多配置。在这里您可能要为VTK配置Qt。在此步骤中,您告诉cmake Qt cmake文件夹在哪里,以便您可以配置VTK来构建Qt内容

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

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

    6)对于Visual Studio:在build目录中打开解决方案并全部构建。完成此操作后,要安装文件(#4),请运行INSTALL项目。

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

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

    例如:
    INSTALLPATH+=C:/VTK/install/include
    

    我不知道您需要哪个库,但是在下面您应该看到模式:
    LIBS+=-LC:/VTK/install/lib \
          -lvtkRenderingCore-6.3
    

    现在,在此之后,由于您具有动态生成,因此需要将.dll文件复制到您从Qt项目创建的exe文件旁边。

    祝好运!

    关于c++ - Qt无法使用VTK库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34483571/

    10-13 04:17