1

我构建了一个 QT Designer 自定义插件,它工作得很好......直到我添加一个不在同一个库中的标题......

如果我将此添加到 MTBFWidget.cpp/.h :

#include "KinectHandler.h"

插件找不到了。如果我删除它,它会起作用..这告诉我它找不到任何外部。我现在真的被困住了,我感谢各种形式的帮助..我认为我的问题可能是我的 CMakeLists.txt,它告诉了如何构建 dll/lib..这是我的 CMakeLists.txt:

    ########### Client Library ###############


    find_package( Qt4 COMPONENTS QtCore QtGui QtOpenGL REQUIRED )
    include( ${QT_USE_FILE} )
    LINK_LIBRARIES( ${QT_LIBRARIES} )

    SET (CLIENT_SOURCES  client.cpp
                         mtbf.cpp
                         pose.cpp
                         MTBFReader.cpp
                         KinectHandler.cpp )

    SET (CLIENT_HEADERS ${PROJECT_SOURCE_DIR}/include/client.h 
                        ${PROJECT_SOURCE_DIR}/include/mtbf.h
                        ${PROJECT_SOURCE_DIR}/include/pose.h
                        ${PROJECT_SOURCE_DIR}/include/MTBFReader.h
                        ${PROJECT_SOURCE_DIR}/include/KinectHandler.h
                        )

    ADD_LIBRARY(client SHARED  ${CLIENT_SOURCES} ${CLIENT_HEADERS} ${CLIENT_MOC_SRC} ${UISrcs})

    TARGET_LINK_LIBRARIES(client ${QT_LIBRARIES} ${Boost_LIBRARIES} ${ODYSSEUS_LIBRARIES})

    ###########################QT Designer Plugin ###################

    set (PLUGIN_MOC_H ${PROJECT_SOURCE_DIR}/include/MTBFWidgetPlugin.h 
                      ${PROJECT_SOURCE_DIR}/include/mtbfwidget.h)

    set (PLUGIN_SRCS MTBFWidgetPlugin.cpp 
                     mtbfwidget.cpp)

    include_directories(${PROJECT_SOURCE_DIR}/include
                        ${QT_QTDESIGNER_INCLUDE_DIR} )

    QT4_WRAP_CPP( MOCsrc ${PLUGIN_MOC_H} )

    ADD_LIBRARY(mtbf_plugin SHARED  ${MOCsrc}  ${PLUGIN_MOC_H} ${PLUGIN_SRCS} )

    add_dependencies(mtbf_plugin client )

    SET_TARGET_PROPERTIES(mtbf_plugin PROPERTIES COMPILE_FLAGS "${QT_DEFINITIONS} -DQDESIGNER_EXPORT_WIDGETS -DQT_PLUGIN -DQT_NO_DEBUG -DQT_SHARED")

    TARGET_LINK_LIBRARIES(mtbf_plugin ${QT_LIBRARIES} client ${Boost_LIBRARIES} ${ODYSSEUS_LIBRARIES})

    set( QT_PLUGIN_PATH $ENV{QT_PLUGIN_PATH} )
    if( QT_PLUGIN_PATH )
        get_target_property( TMP_LIBRARY_PATH mtbf_plugin LOCATION )
        add_custom_command( TARGET mtbf_plugin POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy ${TMP_LIBRARY_PATH} ${QT_PLUGIN_PATH}/designer )
    endif( QT_PLUGIN_PATH )

编辑 :

任何与 QT 相关的包括作品。其他所有包括外部不

作品:

#include "QtGui\qabstractbutton.h"

不工作:

#include "boost\thread.hpp"

奇怪的是,我的程序可以找到所有这些文件,它甚至可以正确编译..

4

2 回答 2

1

最后..我找到了解决方案..如果有人有这个问题:

您需要将所有外部依赖项(在我的情况下为 boost DLL)复制到Qt/XXX/bin 文件夹中

为我解决它: C:\Qt\4.8.4\bin\boost_system-vc100-mt-1_52.dll 需要存在。

还有什么可以帮助您找到依赖项:下载依赖项检查器,查看需要哪个 .dll,然后将其放到 Qt bin 文件夹中。

于 2013-05-15T12:20:31.663 回答
0

在这里检查

include_directories(${PROJECT_SOURCE_DIR}/include
                    ${QT_QTDESIGNER_INCLUDE_DIR} )

我认为您已在此列表中添加了 boost 包含文件夹。并将此文件复制"KinectHandler.h" 到您的项目目录 /include

于 2013-05-15T12:20:09.243 回答