当前位置: 首页 > news >正文

Qt 开发中复制一个已有的 UI 窗体及其对应的 C++ 类

在 Qt 开发中,复制一个已有的 UI 窗体及其对应的 C++ 类通常涉及以下步骤。假设你有一个名为OriginalForm.ui的界面文件,以及对应的OriginalForm.hOriginalForm.cpp(如果使用的是基于 QWidget 的自定义类)。现在你想创建一个副本,命名为NewForm

1. 复制文件

  • 在文件管理器中复制OriginalForm.ui,重命名为NewForm.ui

  • 复制OriginalForm.hOriginalForm.cpp,分别重命名为NewForm.hNewForm.cpp

2. 修改类名和文件内容

修改头文件NewForm.h
  • #define ORIGINALFORM_H之类的宏改为#define NEWFORM_H

  • 将类名class OriginalForm改为class NewForm

  • 如果构造函数有参数,保持签名一致,但类名需要改。

  • 如果类中使用了 Qt 的Q_OBJECT宏,确保它存在。

示例:

cpp

// NewForm.h #ifndef NEWFORM_H #define NEWFORM_H #include <QWidget> namespace Ui { class NewForm; // 注意这里前向声明也改了 } class NewForm : public QWidget { Q_OBJECT public: explicit NewForm(QWidget *parent = nullptr); ~NewForm(); private: Ui::NewForm *ui; }; #endif // NEWFORM_H
修改源文件NewForm.cpp
  • 包含的头文件改为"NewForm.h""ui_NewForm.h"(注意:ui_NewForm.h会在编译时由 UIC 工具根据NewForm.ui生成)。

  • 构造函数和析构函数的类名改为NewForm::NewFormNewForm::~NewForm

  • 如果使用了ui指针,确保初始化列表和 delete 部分也正确。

示例:

cpp

#include "NewForm.h" #include "ui_NewForm.h" NewForm::NewForm(QWidget *parent) : QWidget(parent), ui(new Ui::NewForm) { ui->setupUi(this); } NewForm::~NewForm() { delete ui; }
修改 UI 文件NewForm.ui
  • 用 Qt Designer 或文本编辑器打开NewForm.ui

  • 找到<class>OriginalForm</class>标签,将其改为<class>NewForm</class>

  • 可以同时修改窗口的objectName属性,但这不影响代码生成,只是为了在 Designer 中标识。

3. 更新项目文件(.pro 或 CMakeLists.txt)

  • 如果使用的是 qmake 的.pro文件,确保FORMS包含了新的NewForm.uiSOURCESHEADERS包含了新的.cpp.h文件。

  • 如果使用 CMake,在qt5_wrap_uitarget_sources中添加新文件。

4. 构建项目

  • 重新运行 qmake(或重新配置 CMake),然后编译。

  • UIC 工具会根据NewForm.ui生成ui_NewForm.h,其中定义了Ui::NewForm类。

  • 编译应该成功。

5. 在代码中使用新类

现在你可以在其他地方像使用任何 Qt 窗口类一样使用NewForm

cpp

NewForm *form = new NewForm(this); form->show();

注意事项

  • 如果原类中有自定义的信号/槽或成员变量,复制时记得根据需求调整。

  • 如果原类依赖其他资源(如图片、样式表),确保新类也能正确访问这些资源。

  • 如果两个窗体很相似但又有差异,可以在新类中修改 UI 布局和代码逻辑。

http://www.jsqmd.com/news/420588/

相关文章:

  • 让机器“长眼睛”:产线视觉检测工程如何重塑质量控制逻辑?
  • 空间智能前向布控系统总体架构设计报告——人员多维感知 × 空间计算 × 融合识别 × 趋势预测 × 联动控制体系
  • 实测对比后,AI论文平台千笔AI VS Checkjie,专科生写作首选!
  • AI生成的学术文献是假的?留学生可用这4种方法识别!
  • 论文写不动?10个AI论文软件深度测评,继续教育毕业论文写作必备!
  • 2026年2月实木衣架供应厂家推荐,精选原料品质保障 - 品牌鉴赏师
  • 岳阳科技职院性价比高吗,湖南考生报考费用与价值盘点 - mypinpai
  • 聚焦国产精品:2026年小鼠检测试剂盒市场新选择,鸡试剂盒/小鼠的elisa试剂盒,小鼠检测试剂盒产品找哪家 - 品牌推荐师
  • 基于SSM+VUE的高校就业信息发布平台[SSM]-计算机毕业设计源码+LW文档
  • 基于SSM+VUE的高校快递代取系统[SSM]-计算机毕业设计源码+LW文档
  • 清单来了:10个降AIGC工具测评,本科生降AI率必备神器
  • 导师严选!千笔,倾心之选的AI论文软件
  • 构建AI智能盯盘助手:AKShare + DeepSeek + Server酱实战指南
  • 国产化编辑器怎样处理Excel数据导入?
  • 实测对比后!千笔·专业论文写作工具,专科生写作首选
  • 军工领域中,C#如何保障文件夹上传的安全性?
  • 并网光伏配电网电能质量监测系统设计及仿真验证
  • P6639 「JYLOI Round 1」让P6639 「JYLOI Round 1」让
  • 央企应用里,.NET Core如何处理文件夹上传的断点?
  • 2026年北美求职机构哪家靠谱? ——留学生求职辅导服务商TOP排行榜权威盘点 - Matthewmx
  • 摆脱论文困扰!千笔·降AIGC助手,自考降重首选
  • 机械行业ckeditor支持PDF粘贴吗?
  • 国防项目富文本工具支持截图转存吗?
  • 这次终于选对!9个AI论文写作软件测评:本科生毕业论文+开题报告高效工具推荐
  • 学工管理系统:让校园管理更智能高效
  • 直接上结论:更贴合本科生的降AI率工具,千笔·专业降AIGC智能体 VS 锐智 AI
  • AI新媒体课程
  • 教育行业ASP.NET应用如何优化文件夹上传体验?
  • 自感:是什么,不是什么(增订版)
  • 2026年精选推荐!具备深度学习+语义精准识别的语音客服机器人厂商 - 品牌2025