0

在尝试结合 Qt 和 VTK 时,我遇到了著名的链接错误。我已经正确完成了使用 VTK 安装 Qt 的所有步骤,所以我不知道可能出了什么问题。

我在 Visual Studio 上使用带有 Qt5 和 VTK 6.3 的 Windows 8。

这是我得到的错误:

Drawing.obj : error LNK2019: symbole externe non résolu "__declspec(dllimport) public: __thiscall QVTKWidget::QVTKWidget(class QWidget *,class QFlags<enum Qt::WindowType>)" (__imp_??0QVTKWidget@@QAE@PAVQWidget@@V?$QFlags@W4WindowType@Qt@@@@@Z) référencé dans la fonction "public: __thiscall Drawing::Drawing(void)" (??0Drawing@@QAE@XZ)
1>Drawing.obj : error LNK2019: symbole externe non résolu "__declspec(dllimport) public: virtual __thiscall QVTKWidget::~QVTKWidget(void)" (__imp_??1QVTKWidget@@UAE@XZ) référencé dans la fonction "public: __thiscall Drawing::~Drawing(void)" (??1Drawing@@QAE@XZ)

这是我使用的代码:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QVtk w;
    w.show();
    //start();
    return a.exec();
}

我遵循了这里写的所有内容:Combining Qt 5.4.1 with vtk 6.2.0 (using CMake GUI 3.2.1) on windows但不知何故我得到了这个错误。

此外,我已将:添加到我的“其他包含目录”的$(QTDIR)\lib附加库 $(QTDIR)\include中,并将以下内容添加到我的附加依赖项中。

qtmaind.lib
C:\Users\Lonni\VTK\Build2012Qt\lib\MinSizeRel\QVTKWidgetPlugin.lib
Qt5Cored.lib
Qt5Guid.lib
Qt5Locationd.lib
Qt5Multimediad.lib
Qt5MultimediaWidgetsd.lib
Qt5Testd.lib
Qt5AxContainerd.lib
Qt5AxBased.lib
Qt5OpenGLd.lib
opengl32.lib
glu32.lib
Qt5Sensorsd.lib
Qt5Svgd.lib
Qt5Widgetsd.lib

编辑:

我没有为该项目使用 CMake,因为即使使用 wiki 上提供的小示例,我在使用 Cmake 时也会遇到问题,该示例在以下 CMakeLists.txt 中给出了以下错误。注意:我使用 Visual Studio 作为生成器。

CMakeLists:

cmake_minimum_required(VERSION 2.8)

if(POLICY CMP0020)
  cmake_policy(SET CMP0020 NEW)
endif()

PROJECT(RenderWindowNoUiFile)

find_package(VTK REQUIRED)
include(${VTK_USE_FILE})

if(${VTK_VERSION} VERSION_GREATER "6" AND VTK_QT_VERSION VERSION_GREATER "4")
  # Instruct CMake to run moc automatically when needed.
  set(CMAKE_AUTOMOC ON)
  find_package(Qt5Widgets REQUIRED QUIET)
else()
  find_package(Qt4 REQUIRED)
  include(${QT_USE_FILE})
endif()

include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})

file(GLOB UI_FILES *.ui)
file(GLOB QT_WRAP *.h)
file(GLOB CXX_FILES *.cxx)

if(${VTK_VERSION} VERSION_GREATER "6" AND VTK_QT_VERSION VERSION_GREATER "4")
  qt5_wrap_ui(UISrcs ${UI_FILES} )
  # CMAKE_AUTOMOC in ON so the MocHdrs will be automatically wrapped.
  add_executable(RenderWindowNoUiFile MACOSX_BUNDLE
    ${CXX_FILES} ${UISrcs} ${QT_WRAP})
  qt5_use_modules(RenderWindowNoUiFile Core Gui)
  target_link_libraries(RenderWindowNoUiFile ${VTK_LIBRARIES})
else()
  QT4_WRAP_UI(UISrcs ${UI_FILES})
  QT4_WRAP_CPP(MOCSrcs ${QT_WRAP})
  add_executable(RenderWindowNoUiFile MACOSX_BUNDLE ${CXX_FILES} ${UISrcs} ${MOCSrcs})

  if(VTK_LIBRARIES)
    if(${VTK_VERSION} VERSION_LESS "6")
      target_link_libraries(RenderWindowNoUiFile ${VTK_LIBRARIES} QVTK)
    else()
      target_link_libraries(RenderWindowNoUiFile ${VTK_LIBRARIES})
    endif()
  else()
    target_link_libraries(RenderWindowNoUiFile vtkHybrid QVTK vtkViews ${QT_LIBRARIES})
  endif()
endif()

错误:C:/Program Files (x86)/CMake/share/cmake-3.2/Modules/FindQt4.cmake:1326 处的 CMake 错误(消息):从 NOTFOUND 中找到不合适的 Qt 版本“”,此代码需要 Qt 4.x 调用堆栈(最近调用优先):CMakeLists.txt:18 (find_package)

4

0 回答 0