【问题标题】:there is an error QApplication: no such file or directory有一个错误 QApplication: no such file or directory
【发布时间】:2013-08-12 23:59:44
【问题描述】:

我已经安装了 QtCreator 2.7.2,但是当我尝试编译包含 QApplication 的代码时,它给了我错误:Error QApplication: no such file or directory。

它可以顺利编译教程代码“记事本”,我可以在/usr/include/qt4/QtGui/QApplication中找到QApplication。

这是我的代码: #包括 #include "framework/vision_app.h"

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

    VisionApp vapp;
    if (vapp.init(argc, argv))
    {
       return qapp.exec();
    }
    else
    {
        return 1;
    }
}

多说,我没有任何 .pro 文件。我使用 cmake 来打包我的代码。

这是我的 cmakelist:

cmake_minimum_required(VERSION 2.4.6)
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)

# Set the build type.  Options are:
#  Coverage       : w/ debug symbols, w/o optimization, w/ code-coverage
#  Debug          : w/ debug symbols, w/o optimization
#  Release        : w/o debug symbols, w/ optimization
#  RelWithDebInfo : w/ debug symbols, w/ optimization
#  MinSizeRel     : w/o debug symbols, w/ optimization, stripped binaries
#set(ROS_BUILD_TYPE RelWithDebInfo)

rosbuild_init()
rosbuild_add_boost_directories()

find_package(OpenCV 2.3 REQUIRED)
if(OpenCV_FOUND)
  message(STATUS "OpenCV include: ${OpenCV_INCLUDE_DIRS}")
  message(STATUS "OpenCV libs: ${OpenCV_LIBS}")
  include_directories(${OpenCV_INCLUDE_DIRS})
else(OpenCV_FOUND)
  message(SEND_ERROR "OpenCV not found!!")
endif()

# Qt4 requirements
include_directories(${CMAKE_CURRENT_BINARY_DIR})
set(QT_USE_QTOPENGL TRUE)
find_package(OpenGL REQUIRED)
message (STATUS "OpenGL_found:" ${OPENGL_FOUND})

find_package(Qt4 REQUIRED)
include(${QT_USE_FILE})
add_definitions(${QT_DEFINITIONS})
add_definitions(-DQT_NO_KEYWORDS)

#set the default path for built executables to the "bin" directory
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#set the default path for built libraries to the "lib" directory
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

#uncomment if you have defined messages
#rosbuild_genmsg()
#uncomment if you have defined services
#rosbuild_gensrv()

include_directories(${PROJECT_SOURCE_DIR}/src)
include_directories(${PROJECT_SOURCE_DIR}/src/gui)
set(we_vision_HDRS src/framework/vision_app.h
  src/gui/main_window.h
)
set(we_vision_SRCS src/vision_node_qt.cpp
  src/framework/vision_app.cpp
  src/gui/main_window.cpp
)
set(we_vision_UIS res/main_window.ui)
QT4_WRAP_CPP(we_vision_HDRS_MOC ${we_vision_HDRS})
QT4_WRAP_UI(we_vision_UI_HDRS ${we_vision_UIS})

rosbuild_add_executable(vision_node_qt ${we_vision_SRCS}
  ${we_vision_HDRS_MOC}
  ${we_vision_UI_HDRS}
)
target_link_libraries(vision_node_qt ${OpenCV_LIBS} ${QT_LIBRARIES} ${OPENGL_LIBRARIES})
rosbuild_link_boost(vision_node_qt thread filesystem system)

谁能帮帮我?

【问题讨论】:

  • include 语句在您粘贴的代码中不可见,请您更正一下。

标签: qt


【解决方案1】:

你不会相信,但我刚刚在一个非常古老的项目中遇到了与你完全相同的问题:错误 QApplication:没有这样的文件或目录

我的发现: 我按照我的建议将 MESSAGE(${QT_INCLUDES}) 添加到我的 CMakeLists.txt 中。这揭示了一些非常有趣的事情:我所有的 Qt 包含都指向一个旧的 Qt 4.8.2,它不再存在于我的机器上。即使我添加了一个新工具包并运行 CMake,它也没有更新 CMakeCache.txt。该套件连接到我最近的 Qt 4.8.5,但 cmake '找到' Qt 4.8.2。我通过删除旧的 CMakeCache.txt 解决了我的问题

当 QtCreator 没有找到 CMakeCache.txt 时,它创建了自己的。但不是在我的旧的、过时的地方,而是在构建文件夹中。所以也许这就是解释,为什么你的命令行可以工作,而不是 QtCreator:有两个不同的 QMakeCache.txt 文件。在命令行上你使用正确的,QtCreator 使用它自己的过时的。

【讨论】:

    【解决方案2】:

    我多次看到 include_directories()。我从来没有尝试过,所以我不知道你是通过这种方式添加到包含路径还是只是一次又一次地覆盖路径。

    试试:

    include_directories(
      ${PROJECT_SOURCE_DIR}/src
      ${PROJECT_SOURCE_DIR}/src/gui
      ${QT_INCLUDES}
      ${CMAKE_CURRENT_BINARY_DIR}
      #more includes if necessary
    )
    

    特别是在 include_directories 中添加 ${QT_INCLUDES}。

    【讨论】:

    • 谢谢,我在我的 cmakelist 中添加了“include_directories(${QT_INCLUDES})”,但错误仍然存​​在。
    • 有趣。我尝试了多个 include_directory 版本。有用。又学到了一些东西。 :-) 但是您可以将 MESSAGE(${QT_INCLUDES}) 添加到您的 CMakeLists.txt 中吗?只是看看 Qt 是否正确安装。
    • 我确定 Qt 已正确安装,因为我可以在测试项目中使用 QApplication。
    • 是的,但是 ${QT_INCLUDES} 中有什么。您的 CMakeLists.txt 看起来与我的略有不同。而且我的cmake不太好,我可以立即发现问题。如果您的编译器找不到 QApplication,它会丢失一些标头。所有 Qt 头文件都应该在 ${QT_INCLUDES} 中。这就是为什么我让你把它放在 MESSAGE 中。只是为了确定。
    • 谢谢!我将 MESSAGE("QT include:${QT_INCLUDES}") 添加到我的 cmakelist 中,输出为空白。我应该将 QT_INCLUDE 设置为什么?
    【解决方案3】:

    以下命令(在add_executable 之后)对我有用:

    qt5_use_modules(${PROJECT_NAME} Widgets)
    

    【讨论】:

    • 我在使用 cmake 时也遇到了这个问题。尝试了很多东西,直到我找到了这个!谢谢。顺便说一句:为什么这么多答案谈论 qmake 和 .pro 的东西?这是一个 cmake 问题!
    【解决方案4】:

    可能由两点引起,

    1. QtCreator2.7.2 随 Qt5 发布。在您的 .pro 文件中,您可以添加此行
      greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
      并再次重建您的项目。

    2. 如果您的代码是基于 GUI 的,请确保您的 .pro 具有 QT += gui

    【讨论】:

    • 他不使用qmake,bur cmake。
    【解决方案5】:

    使用 qmake-qt4(而不是 qmake)对我有用。

    【讨论】:

    • 提问者在cmake 中遇到问题,而不是qmake
    猜你喜欢
    • 2016-11-01
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2018-09-30
    • 2019-03-25
    • 2014-11-09
    相关资源
    最近更新 更多