生成的 ui_mainwindow.h 文件找不到为升级的小部件创建的子类标头

问题描述 投票:0回答:1

我创建了一个名为 TextEditEvents 的 QTextEdit 子类。这个子类的目的只是捕获按键事件,然后将信号发送回我的主窗口控制器以对这些信号执行操作。

所以我实现了子类,然后将我原来的“输入”QTextEdit提升到UI设计器中的下一个类。现在在编译时我收到此错误:

在 .../mainwindow.cpp:2 包含的文件中: .../ui_mainwindow.h:22:10:致命错误:texteditevents.h:没有这样的文件或目录

然后,在导航到生成的 ui_mainwindow.h 文件时,我再次在包含的文件上看到相同的错误。

错误截图1

错误截图2

我已经两次和三次检查我的标题名称在升级的 QWidget(以及生成的 ui_mainwindow.h 文件中)是否正确。

我已将构建路径更改为项目目录之外(以上级别)。

我已经确保我有

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

全部包含在我的 CMakeList.txt 中

我已确保 texteditevents 类文件(.cpp 和 .h)包含在我的 CMakeList.txt 文件中。

这是我的 CMakeList.txt 文件的相关摘录。

cmake_minimum_required(VERSION 3.5)

project(EvanderCradle 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 Network)

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

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(EvanderCradle
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
        apiclient.h apiclient.cpp
        serializer.h serializer.cpp
        resources.qrc
        texteditevents.h texteditevents.cpp
    )

最后,这是我升级的 QTextEdit 小部件的配置:

升级的 QTextEdit 小部件

整体窗口布局

c++ qt qt-creator qt6
1个回答
0
投票

了解如何为表单设计器制作一个插件,它将向工具栏添加新的小部件。生成的代码不知道包含正确的标头。

如果你是一个手动编辑.ui文件的变态,.ui文件必须包含一个部分:

<customwidgets>
  <customwidget>
   <class>YourTextEditSubclass</class>
   <extends>QTextEdit</extends>
   <header>YourTextEditSubclass.h</header>
  </customwidget>
  <!-- other customwidgets -->
</customwidgets>

如果自定义类是像 QFrame 这样的容器,它必须具有

<container>1</container>
属性。手动编辑表单非常重要。

© www.soinside.com 2019 - 2024. All rights reserved.