Использование CMake в Qt: location ui _ *. H не распознается Qt Creator

Я пытался использовать Qt Creator управлять файлами интерфейса пользователя *.ui:

mainwindow.cpp:

#include "mainwindow.hpp"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget * parent)
: QMainWindow{parent}
, ui{new Ui::MainWindow}
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{ ; }

mainwindow.hpp:

#pragma once

#include <QMainWindow>
#include <QScopedPointer>

namespace Ui {

class MainWindow;

}

class MainWindow
: public QMainWindow
{

Q_OBJECT

public :

explicit MainWindow(QWidget * parent = Q_NULLPTR);
~MainWindow();

private :

QScopedPointer< Ui::MainWindow > ui;

Q_DISABLE_COPY(MainWindow)

};

CMakeLists.txt:

cmake_minimum_required(VERSION 3.8)

project("gui" LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)

find_package(Qt5 CONFIG REQUIRED Core Widgets)

set(UI_FILES "mainwindow.ui")

set(SOURCES)
list(APPEND SOURCES "main.cpp")
list(APPEND SOURCES "mainwindow.cpp")

add_executable(${PROJECT_NAME} ${OS_BUNDLE} ${SOURCES} ${UI_FILES})

target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core Qt5::Widgets)

set_target_properties(${PROJECT_NAME} PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED YES
CXX_EXTENSIONS YES
)

Когда я ставлю курсор на #include "ui_mainwindow.h" имя файла и нажмите F2, тогда я получаю следующее сообщение об ошибке:

сообщение об ошибке

Я исследовал проблему: она происходит из разных мест, упомянутых в файле D:/Projects/build/proj/Debug/src/gui/CMakeFiles/gui.dir/CXX.includecache:

gui_autogen/include/ui_mainwindow.h
D:/Projects/proj/gui/gui_autogen/include/ui_mainwindow.h

Это две последовательные строки, которые содержит только ui_mainwindow.h как подстрока во всем файле. Вторая строка содержит неправильное местоположение, даже если я добавлю target_include_directories(${PROJECT_NAME} PRIVATE "${PROJECT_BINARY_DIR}/gui_autogen/include") в CMakeLists.txt, затем cmake В любом случае невозможно создать правильный файл кэша.

Какой обходной путь к этому? Я думаю, что я могу редактировать (патч) некоторые *.cmake файлы в Qt подсистема CMake распределение. Я почти уверен, что это тесно связано с CMAKE_AUTOMOC директива и прочее.

ДОПОЛНИТЕЛЬНО:

Основная проблема в том, что я не могу создать слот из редактора форм Перейти в слот пункт контекстного меню для автоматического создания слота из Qt Cretator.

1

Решение

Наконец я нашел обходной путь. Это Qt Creatorограничение синтаксического анализатора: указатель на Ui::MainWindow должен быть простой старый необработанный указатель. То есть я не могу использовать какую-либо RAII-обертку, вроде std::unique_ptr или же QScopedPointer и должен вручную delete Ui::MainWindow экземпляр во время уничтожения. Может быть, иногда это будет исправлено хотя бы для QScopedPointer, Я надеюсь.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]