【发布时间】:2023-03-08 20:25:01
【问题描述】:
我尝试使用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 指令和其他东西密切相关。
附加:
主要问题是我无法从表单编辑器的 Go to slot 上下文菜单项创建插槽以从 Qt Cretator 自动生成插槽。
【问题讨论】:
-
但是文件
ui_mainwindow.h是在某处生成的吗? -
@piwi 是的,看看我的下一条评论。项目构建良好。
-
源内解决方法是在文件名前加上相对路径:
#include "gui_autogen/include/ui_mainwindow.h"。但由于实现细节,它看起来很难看。 -
当您调用
target_include_directories()时,${PROJECT_BINARY_DIR}是什么?你不是说${CMAKE_BINARY_DIR}吗? -
@piwi
message(FATAL_ERROR "---${PROJECT_BINARY_DIR}---")给了---D:/Projects/build/proj/Debug/src/gui---。
标签: c++ qt cmake auto-generate uic