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


Решение, которое я пробовал до сих пор:
1) Я пытался удалить #include "ui_utm_zone.h"
из .cpp
, но безуспешно ошибка сохраняется
2) Я несколько раз перекомпилировал catkin_ws
, но постоянно получаю ту же ошибку, показанную на экране печати ниже:

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

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
в другое место, которое можно увидеть ниже:

, а его исходный код находится ниже:
#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();
, заключается в той же самой ошибке, которую я получаю.
Пожалуйста, укажите в правильном направлении, чтобы пролить свет на этот вопрос.