实现效果:

头文件:

#pragma once
#include <QMdiArea>
#include <QMdiSubWindow>
#include <QMainWindow>
#include "ui_MainFrame1.h"
#include "DockManager.h"
#include "DockAreaWidget.h"

class MainFrame1 : public RibbonMainWindow
{
Q_OBJECT

public:
MainFrame1(QWidget *parent = nullptr);
~MainFrame1();


public slots:
void ribboncurrentPageIndexChanged(int index);

private:
Ui::MainFrame1Class ui;
QMdiArea* mdiArea;
QDockWidget* m_propDock;
QDockWidget* m_leftDock;
ads::CDockManager* m_pDockManger;
};

实现文件:

#include "MainFrame1.h"
#include <QMdiArea>
#include <QMdiSubWindow>
#include <qtreewidget.h>
#include <QDockWidget>
#include <QVBoxLayout>
#include "Page1.h"
#include "LeftWidget.h"

#pragma execution_character_set("utf-8")

MainFrame1::MainFrame1(QWidget *parent)
: RibbonMainWindow(parent)
{
//setStyleSheet("QMainWindow::title { background-color: red; }");

    //ui.setupUi(this);
RibbonPage* pageHome1 = ribbonBar()->addPage(tr("Home1"));
RibbonGroup* pGroup = pageHome1->addGroup(QString("button"));

    RibbonPage* pageHome2 = ribbonBar()->addPage(tr("Home2"));
RibbonPage* pageHome3 = ribbonBar()->addPage(tr("Home3"));
RibbonPage* pageHome4 = ribbonBar()->addPage(tr("Home4"));

    m_pDockManger = new ads::CDockManager(this);
this->setCentralWidget(m_pDockManger);


// 中心
{
mdiArea = new QMdiArea;
mdiArea->setViewMode(QMdiArea::TabbedView);
setCentralWidget(mdiArea);

        Page1* page1 = new Page1;
QMdiSubWindow* subWindow = mdiArea->addSubWindow(page1);
subWindow->setWindowState(Qt::WindowMaximized);
}

    // 左侧
{
m_leftDock = new QDockWidget(tr("Left"), this);
m_leftDock->setAllowedAreas(Qt::AllDockWidgetAreas);
m_leftDock->setWidget(new LeftWidget());
addDockWidget(Qt::LeftDockWidgetArea, m_leftDock);
}

    // 右侧
{
m_propDock = new QDockWidget(tr("QTreeWidget"), this);
m_propDock->setAllowedAreas(Qt::AllDockWidgetAreas);
m_propDock->setWidget(new QTreeWidget());
addDockWidget(Qt::RightDockWidgetArea, m_propDock);
}

    connect(ribbonBar(), SIGNAL(currentPageIndexChanged(int)), this, SLOT(ribboncurrentPageIndexChanged(int)));


QStatusBar* pStatusBar = statusBar();
{
QLabel* pLabel = new QLabel();
pLabel->setText(tr("StatusBar"));
pStatusBar->addWidget(pLabel);

        QComboBox* pComboBox = new QComboBox();
pComboBox->addItem(tr("combo1"));
pStatusBar->addWidget(pComboBox);


Qtitan::RibbonSliderPane* sliderPane = new Qtitan::RibbonSliderPane();
sliderPane->setScrollButtons(true);
sliderPane->setRange(0, 100); // Range
sliderPane->setMinimumWidth(100);
sliderPane->setSingleStep(10);
sliderPane->setMaximumWidth(130);
pStatusBar->addPermanentWidget(sliderPane);
}


setMinimumSize(800, 500);
}

void MainFrame1::ribboncurrentPageIndexChanged(int index)
{
switch (index)
{
case 0:
{
int y = 0;
break;
}
case 1:
{
int y = 0;
break;
}
case 2:
{
int y = 0;
break;
}
case 3:
{
int y = 0;
break;
}
default:
break;
}
}


MainFrame1::~MainFrame1()
{}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91284.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91284.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/91284.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何修改 MySQL 8.0 的密码,和忘记密码时如何修改

要修改 MySQL 8.0 的密码&#xff0c;可以通过以下几种方法实现&#xff1a;方法 1&#xff1a;使用 ALTER USER 命令&#xff08;推荐&#xff09;这是 MySQL 8.0 推荐的修改密码方式&#xff1a;-- 修改当前登录用户的密码 ALTER USER USER() IDENTIFIED BY 新密码;-- 修改指…

图像处理控件Aspose.Imaging教程:使用 C# 编程将 CMX 转换为 PNG

PNG图像文件格式是广泛使用的图像格式之一。这种图像文件格式提供了增强的共享和显示功能。另一方面&#xff0c;CMX也是 Corel 应用程序主要使用的图像文件格式。然而&#xff0c;将 CMX 转换为 PNG 可以帮助用户在网络上查看和共享文件。因此&#xff0c;在本指南中&#xff…

迪丽热巴写真壁纸

下载&#xff1a;https://pan.quark.cn/s/a740dbac8274迪丽热巴绝美写真&#xff0c;高清壁纸展现独特魅力&#xff0c;每一张都是视觉盛宴

C++11 std::function 详解:通用多态函数包装器

在C11标准中&#xff0c;引入了std::function这一通用多态函数包装器&#xff0c;定义于<functional>头文件中。它彻底改变了C中函数对象的使用方式&#xff0c;为不同类型的可调用实体提供了统一的接口。std::function能够存储、复制和调用任何可复制构造的可调用目标&a…

Kafka运维实战 16 - kafka 分区重新分配【实战】

💻 Kafka运维实战 (17篇) 📝Kafka运维实战 17 - kafka 分区副本从 1 增加到 3【实战】 📝Kafka运维实战 16 - kafka 分区重新分配【实战】 📝Kafka运维实战 15 - kafka 重设消费者组位移入门和实战【实战】 📝Kafka运维实战 14 - kafka消费者组消费进度(Lag)深入理…

智汇AI,应用领航 | 华宇万象问数入选2025全景赋能典型案例

7月29日&#xff0c;以“AI城市&#xff1a;数启新纪元”为主题中关村人工智能与未来城市论坛在中关村国家自主创新示范区展示中心举办。本次论坛围绕人工智能创新应用落地实践、新型数据基础设施建设、数据要素价值释放机制、城市智能治理等关键议题&#xff0c;邀请院士专家和…

sqli-labs:Less-7关卡详细解析

1. 思路&#x1f680; 本关的SQL语句为&#xff1a; $sql"SELECT * FROM users WHERE id(($id)) LIMIT 0,1";注入类型&#xff1a;字符串型&#xff08;单引号、双括号包裹&#xff09;提示&#xff1a;参数id需以))闭合 同样无法像常规一样回显&#xff0c;php输出语…

编程算法:从理论基石到产业变革的核心驱动力

文章目录 算法的本质与效率衡量 基础算法范式的实践价值 排序算法的演进与选择 动态规划的实用技巧 算法在现代技术栈中的应用 大数据处理的算法框架 编译器中的算法优化 算法驱动的产业变革 金融领域的算法应用 医疗健康领域的算法创新 制造业的算法优化 算法的未来趋势 结语 …

深度学习中的注意力机制:原理、应用与未来展望

在人工智能领域&#xff0c;深度学习技术已经取得了巨大的突破&#xff0c;而注意力机制&#xff08;Attention Mechanism&#xff09;作为深度学习中的一个重要概念&#xff0c;正在逐渐改变我们对模型的理解和应用。本文将深入探讨注意力机制的原理、在不同领域的应用以及未来…

LeetCode 4:寻找两个正序数组的中位数

LeetCode 4&#xff1a;寻找两个正序数组的中位数问题定义与核心挑战 给定两个有序&#xff08;升序&#xff09;数组 nums1 和 nums2&#xff0c;要求找到它们的中位数&#xff0c;且算法时间复杂度为 O(log(mn))&#xff08;m 和 n 分别是两个数组的长度&#xff09;。 中位数…

独立站如何吃掉平台蛋糕?DTC模式下的成本重构与利润跃升

一、成本结构革命&#xff1a;从「流量税」到「用户终身价值」亚马逊卖家需支付15%佣金12%广告费&#xff0c;导致每$100收入中平台抽成$27。而成熟独立站通过SEO&#xff08;自然流量占比超40%&#xff09;和社交媒体内容引流&#xff0c;将获客成本压缩至$8-$15。更关键的是用…

应用驱动 协同创新:中国人工智能开启高质量发展新篇章

人工智能技术的突破性发展正引发全球产业格局的深刻变革。在2025年这个关键节点&#xff0c;中国以"应用导向"为战略支点&#xff0c;依托新型举国体制优势&#xff0c;正在构建具有中国特色的人工智能发展体系&#xff0c;为全球智能革命贡献东方智慧。一、战略布局…

ZKMall商城开源本地部署指南

1. 开发环境配置 以下是开发工具的最低版本要求。在继续之前&#xff0c;请务必安装所有必需的依赖项。 工具版本JDK17MySQL5.7.3Redis5.0Maven3.9.5NodeJS20.18.0 1.1 安装资源 如需详细的安装指南&#xff0c;您可以参考以下教程&#xff1a; JDK: 菜鸟教程 Java 环境搭建…

《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——8. AI赋能(下):在Qt中部署YOLOv8模型

目录一、概述1.1 背景介绍&#xff1a;从“训练”到“部署”1.2 学习目标二、在C中集成ONNX模型2.1 准备模型文件2.2 修改Backend以加载和运行模型三、关键一步&#xff1a;输出结果的后处理四、运行与验证五、总结与展望一、概述 1.1 背景介绍&#xff1a;从“训练”到“部署…

【动态规划 | 多状态问题】动态规划求解多状态问题

算法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;斐波那契数列模型路径问题多状态问题通常涉及多个决策点和状态转换&#xff0c;解决起来复杂且计算量大。动态规划作为一种强大的算法工具&#xff0c;能够通过将问题分解为子问题并逐步求解&#xff0c;显著提…

【HTTP】防XSS+SQL注入:自定义HttpMessageConverter过滤链深度解决方案

防XSSSQL注入&#xff1a;自定义HttpMessageConverter过滤链深度解决方案一、安全威胁模型分析二、自定义HttpMessageConverter架构设计2.1 技术栈组成三、完整实现代码3.1 安全过滤工具类3.2 自定义HttpMessageConverter3.3 Spring安全配置四、深度防御增强方案4.1 SQL注入参数…

学习游戏制作记录(冻结敌人时间与黑洞技能)7.30

1.实现剑击中敌人时冻结敌人时间Enemy脚本&#xff1a;public float defaultMoveSpeed;//默认速度defaultMoveSpeed moveSpeed;//Awake&#xff08;&#xff09;中设置public virtual void FreezeTime(bool _timeFreeze)//冻结设置函数{if (_timeFreeze){moveSpeed 0;anim.sp…

【数据结构】真题 2016

待补充已知表头元素为c的单链表在内存中的存储状态如下表所示地址元素链接地址1000Ha1010H1004Hb100CH1008Hc1000H100CHdNULL1010He1004H1014H现将f存放于1014H处并插入到单链表中&#xff0c;若f在逻辑上位于a和e之间&#xff0c;则a, e, f的“链接地址”依次是&#xff08; &…

双线串行的 “跨界对话”:I2C 与 MDIO 的异同解析

在电子系统设计中,串行总线凭借其精简的信号线数量和灵活的拓扑结构,成为芯片间通信的主流选择。I2C(Inter-Integrated Circuit)和 MDIO(Management Data Input/Output)作为两种典型的双线串行总线,虽同属低速信号范畴,却在各自的应用领域扮演着不可替代的角色。本文将…

算法精讲:二分查找(二)—— 变形技巧

&#x1f3af; 算法精讲&#xff1a;二分查找&#xff08;二&#xff09;—— 变形技巧 &#x1f50d; 友情提示&#xff1a;&#xff1a;本小节含高能代码片段 &#x1f964; 阅读前请确保已掌握基础二分原理与实现代码片段可能包含不同程度的变形&#xff0c;请根据实际情况选…