LINUX.ORG.RU

'ui_categories.h' file not found В Qt

 , ,


0

1

ишу приложение в qt creator на ubuntu linux. В нём мне сейчас необходимо открыть не пустое окно по нажатию на кнопку из MainWindow, но при написании логики для второго окна встречаю ошибки

15: warning: Deleting pointer to incomplete type 'Ui::Categories' may cause undefined behavior
9: error:Member access into incomplete type 'Ui::Categories'
7: error:Allocation of incomplete type 'Ui::Categories'
2: error: 'ui_categories.h' file not found

.h

#ifndef CATEGORIES_H
#define CATEGORIES_H
 
 
#include <QtWidgets>
 
namespace Ui {
class Categories;
}
 
class Categories : public QWidget
{
    Q_OBJECT
public:
    explicit Categories(QWidget *parent = nullptr);
    ~Categories();
 
private:
    Ui::Categories *ui;
 
signals:
};
 
 
#endif // CATEGORIES_H

.cpp

#include "categories.h"
#include "ui_categories.h"
 
 
Categories::Categories(QWidget *parent)
    : QWidget{parent}
    ,ui(new Ui::Categories)
{
    ui->setupUi();
 
}
 
Categories::~Categories()
{
    delete ui;
}

Не могу понять почему не создаётся файл ui_categories.h. Смотрел в папке build там нет его, но есть ui_mainwindow.h. Полагаю остальные ошибки именно из-за этого инклуда. Как можно исправить эти ошибки?


Ответ на: комментарий от nikitalol
cmake_minimum_required(VERSION 3.16)

project(ProchApp VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)

set(PROJECT_SOURCES
        main.cpp
        mainwindow.cpp
        mainwindow.h
        mainwindow.ui
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(ProchApp
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
    )
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET ProchApp APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
#                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
    if(ANDROID)
        add_library(ProchApp SHARED
            ${PROJECT_SOURCES}
        )
# Define properties for Android with Qt 5 after find_package() calls as:
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
    else()
        add_executable(ProchApp
            ${PROJECT_SOURCES}
            categories.h categories.cpp


        )
    endif()
endif()

target_link_libraries(ProchApp PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)
  set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.ProchApp)
endif()
set_target_properties(ProchApp PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

include(GNUInstallDirs)
install(TARGETS ProchApp
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(ProchApp)
endif()
Jython
() автор топика
Ответ на: комментарий от Jython
set(PROJECT_SOURCES
        main.cpp
        mainwindow.cpp
        mainwindow.h
        mainwindow.ui
)

Задачка на внимательность…

Новичок? Откуда взят симейклист?

В нём реально больше чем нужно в таком проекте, так что про всратость вам по делу написали

nikitalol
()
Последнее исправление: nikitalol (всего исправлений: 2)
Ответ на: комментарий от Jython

Понятно, но в топике уже достаточно инфы для нахождения ответа

Если что то меняешь в именах файлов, открой хотя бы самый простой туториал по cmake

nikitalol
()
Последнее исправление: nikitalol (всего исправлений: 1)
Ответ на: комментарий от nikitalol
set(PROJECT_SOURCES
        main.cpp
        mainwindow.cpp
        mainwindow.h
        mainwindow.ui
        categories.cpp
        categories.h
        categories.ui
)

Поменял этот параметр и вручную создал categories.ui. Ошибка инклуда пропала но появилось предупреждение

warning: Included header ui_categories.h is not used directly (fix available)
Jython
() автор топика
Ответ на: комментарий от anonymous

Немного сократил CMakeLists.txt

cmake_minimum_required(VERSION 3.16)

project(ProchApp VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)


find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
target_link_libraries(${PROJECT_NAME} Qt${QT_VERSION_MAJOR}::Widgets)


set(PROJECT_SOURCES
        main.cpp
        mainwindow.cpp
        mainwindow.h
        mainwindow.ui
        categories.cpp
        categories.h
        categories.ui
)

qt_add_executable(ProchApp
    MANUAL_FINALIZATION
        ${PROJECT_SOURCES})

Но почему-то теперь появляются другие ошибки

:-1: error: CMake returned error code: 1
:-1: error: The command "/snap/bin/cmake -S /home/jython/Programming/Proch/ProchApp -B ProchApp/build/Desktop-Debug" terminated with exit code 1.
ProchApp/CMakeLists.txt:15: error: Cannot specify link libraries for target "ProchApp" which is not built by
this project.
Jython
() автор топика
Ответ на: комментарий от nikitalol

С Qt в Cmake совсем просто не бывает, а тут неофит ещё и на двух мажорных версиях хочет усидеть.

Если проект на Qt простой и не нацелен на андроид, то лучше не использовать специфичные штуки вроде qt_add_executadle и другие с префиксом qt_.

anonymous
()

incomplete type 'Ui::Categories'

Мне кажется у тебя не подключен какой-то заголовочник кутевый. С кутями часто так, вроде символ виден, но это только его объявление, а имплементация подключается другим инклудом.

Loki13 ★★★★★
()