我创建了一个名为 TextEditEvents 的 QTextEdit 子类。这个子类的目的只是捕获按键事件,然后将信号发送回我的主窗口控制器以对这些信号执行操作。
所以我实现了子类,然后将我原来的“输入”QTextEdit提升到UI设计器中的下一个类。现在在编译时我收到此错误:
在 .../mainwindow.cpp:2 包含的文件中: .../ui_mainwindow.h:22:10:致命错误:texteditevents.h:没有这样的文件或目录
然后,在导航到生成的 ui_mainwindow.h 文件时,我再次在包含的文件上看到相同的错误。
我已经两次和三次检查我的标题名称在升级的 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 小部件的配置:
了解如何为表单设计器制作一个插件,它将向工具栏添加新的小部件。生成的代码不知道包含正确的标头。
如果你是一个手动编辑.ui文件的变态,.ui文件必须包含一个部分:
<customwidgets>
<customwidget>
<class>YourTextEditSubclass</class>
<extends>QTextEdit</extends>
<header>YourTextEditSubclass.h</header>
</customwidget>
<!-- other customwidgets -->
</customwidgets>
如果自定义类是像 QFrame 这样的容器,它必须具有
<container>1</container>
属性。手动编辑表单非常重要。