您好stackoverflow系列
我试图让vtk使用qt。我应该承认我是新手,所以放轻松。我试图为自己学习c ++,并选择了以下配置来帮助我入门;
操作系统:Windows 7终极版 工具包:QT 5.3.2我将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
答案 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)可能会使您免于遭受太多错误。