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

在 Qt Creator 中使用 Promote 功能让 QTabWidget 显示自定义页面

 

💡 在 Qt Creator 中使用 Promote 功能让 QTabWidget 显示自定义页面

在使用 Qt Creator 开发界面时,我们经常需要在 QTabWidget(标签页控件)中显示自己设计的自定义页面,而不是简单的 QWidget
本篇教程将详细讲解如何通过 Promote(提升) 功能,让 QTabWidget 的每个标签页使用你自己的类。


🧩 项目结构示例

最终项目结构如下:

MyProject/
├── main.cpp
├── mainwindow.h
├── mainwindow.cpp
├── mainwindow.ui
├── tabpage1.h
├── tabpage1.cpp
├── tabpage1.ui
├── tabpage2.h
├── tabpage2.cpp
└── tabpage2.ui

✳️ 步骤 1:创建主窗口 MainWindow

  1. 打开 Qt Creator,选择 File → New Project → Qt Widgets Application

  2. 命名为 MyProject

  3. 创建完成后会自动生成 mainwindow.h / .cpp / .ui 三个文件。


✳️ 步骤 2:在主窗口中添加 QTabWidget

  1. 打开 mainwindow.ui

  2. 从左侧 Widget Box 中拖入一个 QTabWidget

  3. 现在你会看到默认有两个标签页(tabtab_2),每页里是一个普通的 QWidget


✳️ 步骤 3:创建两个自定义页面类

接下来我们要创建两个页面类:TabPage1TabPage2

在 Qt Creator 中:

  • 选择 File → New File or Project → Qt Designer Form Class

  • 分别命名为 TabPage1TabPage2

  • 基类选择 QWidget


📄 tabpage1.h

#pragma once
#include <QWidget>namespace Ui {
class TabPage1;
}class TabPage1 : public QWidget {Q_OBJECT
public:explicit TabPage1(QWidget *parent = nullptr);~TabPage1();private:Ui::TabPage1 *ui;
};

📄 tabpage1.cpp

#include "tabpage1.h"
#include "ui_tabpage1.h"TabPage1::TabPage1(QWidget *parent): QWidget(parent), ui(new Ui::TabPage1) {ui->setupUi(this);
}TabPage1::~TabPage1() {delete ui;
}

打开 tabpage1.ui,可以随意放一个标签(QLabel)并设置文本为:

这是第一页(TabPage1)


📄 tabpage2.h

#pragma once
#include <QWidget>namespace Ui {
class TabPage2;
}class TabPage2 : public QWidget {Q_OBJECT
public:explicit TabPage2(QWidget *parent = nullptr);~TabPage2();private:Ui::TabPage2 *ui;
};

📄 tabpage2.cpp

#include "tabpage2.h"
#include "ui_tabpage2.h"TabPage2::TabPage2(QWidget *parent): QWidget(parent), ui(new Ui::TabPage2) {ui->setupUi(this);
}TabPage2::~TabPage2() {delete ui;
}

同样,在 tabpage2.ui 中放一个标签:

这是第二页(TabPage2)


✳️ 步骤 4:在 mainwindow.ui 中使用 Promote 功能

现在让 QTabWidget 的每个标签页显示你的自定义页面。

  1. 打开 mainwindow.ui

  2. 点击第一个标签页中的 QWidget

  3. 右键 → 选择 Promote to...(提升为...)

  4. 在弹出的窗口中填写:

    • Promoted class name: TabPage1

    • Header file: tabpage1.h

    • 点击 AddPromote

对第二个标签页重复同样的操作:

  • Promoted class name: TabPage2

  • Header file: tabpage2.h

保存 .ui 文件。


✳️ 步骤 5:编写 main.cpp

#include "mainwindow.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

✅ 运行结果

运行项目后,主窗口中将显示一个 QTabWidget,包含两个标签页:

  • 第一页:显示 TabPage1 的内容

  • 第二页:显示 TabPage2 的内容

每个页面都可以独立设计自己的 UI,互不干扰,非常适合复杂界面模块化。


🧠 补充说明

  • “Promote” 功能只影响 Qt Designer 层面,不会修改 .cpp 代码;

  • 适用于任何继承自 QWidgetQFrameQDialog 等的自定义类;

  • 这样做可以保持 .ui 文件的整洁,同时实现强大的可复用性。


📊 示意图

MainWindow└── QTabWidget├── Tab 1 → TabPage1 (自定义 QWidget)└── Tab 2 → TabPage2 (自定义 QWidget)

🏁 总结

通过 Promote(提升) 功能:

  • 你可以在 Qt Designer 中将普通控件替换成自己的类;

  • 让界面更模块化、代码更清晰;

  • 无需手动修改 .ui 生成的代码。

这是 Qt 界面开发中非常实用的一项技巧,尤其是在大型项目中管理多个页面时。

 

http://www.hskmm.com/?act=detail&tid=31693

相关文章:

  • AI赋能标准化流程:智能汽车软件CI/CT最佳实践新范式
  • The 2023 ICPC Asia Shenyang Regional Contest K. Maximum Rating
  • 用积木思维搞定TCP/IP——LuatOS快速上手指南
  • 2025 年江门办公室装修公司最新推荐排行榜:助力企业避开装修陷阱,精选优质服务品牌
  • WPF自动弹出软件键盘
  • 【碎片化学习】JMeter中常用的设置优化
  • win10系统以太网未识别网络 没有有效ip配置怎么办?
  • 怎么考PostgreSQL PG中级认证证书
  • 大学本科及研究生金融专业题库数据集:109157条高质量中文金融教育题库数据,涵盖银行证券保险投资理财等全领域,支持智能教育系统与机器学习算法训练的专业数据集
  • 【比赛记录】2025CSP-S模拟赛61
  • 基于Rokid CXR-S SDK的智能AR翻译助手技术拆解与实现指南
  • VRED 2025:专业三维可视化与虚拟现实领域的高效设计工具
  • 2025年办公与商业空间软膜天花系统推荐榜:办公室/酒店/展厅/商场/汽车4S店软膜天花厂家,专注光环境与装饰一体化解决方案
  • SZMS 251009 订题赛 题解
  • Debian 12安装docker的正确方法
  • 【流量网关】k8s与apisix统一的流量入口方案(内网版)
  • 基于STM32F4系列MCU和CS5530 24位SDADC的称重传感器系统实现
  • 2025 年环保板材厂家最新推荐榜:硬包板 / 竹木纤维板等全品类 企业深度解析
  • kong 网关下集成 Consul服务注册与发现
  • cad圆滑连接两段线:blend
  • 在 gitea 服务器端查询 lfs 文件占用情况
  • HDR图像生成算法详解
  • Introduction: Why Optimization?
  • 基于MATLAB的二自由度机械臂PID控制仿真
  • Spring AOP原理
  • Ventoy引导Kali live USB持久化
  • 知识库管理工具深度测评:ONES、Confluence 等10款工具全面对比
  • 好的测试数据管理,到底要怎么做?
  • 【面试题】人工智能工程师高频面试题汇总:循环神经网络篇(题目+答案)
  • 做了个手机上的“视频播放器”,获益匪浅