Неожиданный заголовочный файл "not found" в Qt5-CMake-Catkin не позволяет программе компилироваться - PullRequest
0 голосов
/ 30 мая 2019

Я строю небольшой проект, используя CMake и Qt5 внутри catkin_ws.Как только я создал небольшой .ui в качестве примера и попытался запустить его, в моем .cpp файле #include "ui_utm_zone.h" появился странный заголовочный файл, такого типа ошибки никогда не возникало, и я начал проводить обширные исследования по ее решению.Например, я увидел здесь , что это, вероятно, связано с каким-то файлом moc, но из-за ошибки, которую выдает мой компилятор, это кажется невозможным, хотя я могу ошибаться, поскольку никогда раньше не видел эту ошибку.Также из этого источника видно, что в Qt5 вы должны выбрать Form Class для генерации соответствующих файлов .cpp и .h и файлов .ui.Это именно то, что я сделал, см. Для ясности ниже на экране печати

qt Небольшой код, который в настоящее время несет эту проблему, показан ниже: utm_zone.h

#ifndef UTM_ZONE_H
#define UTM_ZONE_H

#include <QWidget>
namespace Ui {
class UTM_Zone;
}

class UTM_Zone : public QWidget
{
  Q_OBJECT

public:
  explicit UTM_Zone(QWidget *parent = nullptr);
  ~UTM_Zone();

private:
  Ui::UTM_Zone *ui;
};
#endif // UTM_ZONE_H

utm_zone.cpp

#include "utm_zone.h"
#include "ui_utm_zone.h"

UTM_Zone::UTM_Zone(QWidget *parent) :QWidget(parent), ui(new Ui::UTM_Zone)
{
  ui->setupUi(this);
}

UTM_Zone::~UTM_Zone()
{
  delete ui;
}

Отображается ошибка:

См. Ниже два экрана печати с проблемой, которую я получаю:

p1

p2

Решение, которое я пробовал до сих пор:

1) Я пытался удалить #include "ui_utm_zone.h"из .cpp, но безуспешно ошибка сохраняется

2) Я несколько раз перекомпилировал catkin_ws, но постоянно получаю ту же ошибку, показанную на экране печати ниже:

catkin_make

3) Я несколько раз стирал и заново создавал класс формы конструктора и перекомпилировал catkin_make, но ошибка все еще сохраняется.Дерево проекта можно увидеть ниже:

project_tree

4) В случае необходимости я отправляю код CMake, который я использую:

cmake_minimum_required(VERSION 2.8.3)
project(ros_float)
add_compile_options(-std=c++11)
find_package(rosbag REQUIRED)
include_directories(${rosbag_INCLUDE_DIRS})
find_package(catkin REQUIRED COMPONENTS
  roscpp
  sensor_msgs
  std_msgs
  message_generation
)
#
# instructions ....
#

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

find_package(Qt5Widgets)
find_package(Qt5PrintSupport)
#find all the qt UI stuff
file(GLOB UI
    "include/${PROJECT_NAME}/ui/*.ui"
)

qt5_wrap_ui (MB_UI_HDRS  ${UI})

include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)

file(GLOB INCLUDES
    "include/${PROJECT_NAME}/*.h"
    "include/${PROJECT_NAME}/*.cpp"
    "include/${PROJECT_NAME}/*.hpp"
    )

file(GLOB QT_SRCS
    "include/${PROJECT_NAME}/ui/*.h"
    "include/${PROJECT_NAME}/ui/*.cpp"
    "include/${PROJECT_NAME}/ui/*.hpp"
)

add_library(${PROJECT_NAME}
    ${SRCS}
)

add_executable(utm_node src/utm_node.cpp ${MB_UI_HDRS} ${QT_SRCS} ${SRCS} )
target_link_libraries(utm_node Qt5::Widgets  Qt5::PrintSupport Qt5::Core ${catkin_LIBRARIES})

Если вы спрашиваете, я помещаю исполняемый файл utm_node.cpp в другое место, которое можно увидеть ниже:

total_tree

, а его исходный код находится ниже:

#include <ros/ros.h>
#include "../include/ros_float/ui/utm_zone.h"
#include <qt5/QtWidgets/QApplication>
#include <qt5/QtCore/qglobal.h>

int main(int argc, char *argv[])
{
    (void) argc;
    (void) argv;
    ros::init(argc, argv, "utm_node");
//    QApplication a(argc, argv);
//    UTM_Zone w;
//    w.show();
//    return a.exec();
}

Причина, по которой я прокомментировал //QApplication a(argc, argv); и // UTM_Zone w; и //return a.exec();, заключается в той же самой ошибке, которую я получаю.

Пожалуйста, укажите в правильном направлении, чтобы пролить свет на этот вопрос.

...