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

开源Qt Ribbon控件——SARibbon的布局思路及介绍

开源Qt Ribbon控件——SARibbon的布局思路及介绍

  • SARibbon的布局
  • SARibbon名词定义
  • Office布局模式——SARibbonBar::OfficeStyle
  • WPS布局模式——SARibbonBar::WpsLiteStyle
    • pannel的布局
    • 行数
    • 3行模式
    • 2行模式


原文链接:https://blog.csdn.net/czyt1988/article/details/113811620

https://devpress.csdn.net/gitcode/6412b1fe986c660f3cf9294a.html?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2defaultCTRLISTactivity-4-108312948-blog-126431338.235^v31^pc_relevant_default_base3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2defaultCTRLISTactivity-4-108312948-blog-126431338.235v31pc_relevant_default_base3&utm_relevant_index=7#devmenu2

Qt 下结合SARibbon、Dock 开发Opencascade应用的基础框架

SARibbon的布局

在介绍如何使用SARibbon之前,需要首先了解SARibbon是如何布局的,在src/SARibbonBar/doc下有个ppt对Ribbon的布局进行了介绍,本文内容与ppt一直,增加了一些文字说明。

由于SARibbon支持四种布局模式,这四种布局模式定义在SARibbonBar的枚举SARibbonBar::RibbonStyle,由于布局模式会影响显示效果和实际函数调用的方法,因此有必要先对SARibbon支持的这四种布局模式进行介绍。

SARibbon名词定义

无论是后面介绍的wps模式还是office模式,这些专有名称都是一致的,这些命名参考了MFC的ribbon界面类。
在这里插入图片描述

  • Category 类别,代表一个标签所呈现的内容,对应SARibbonCategory
  • Context Category 上下文类别,这个是一种特殊的类别,它正常不显示,需要基于上下文判断是否应该显示,最常用的就是word中插入图片后,会有图片修改相关的标签出现,如果没选中图片,这个标签就消失,这个就是上下文类别,对应SARibbonContextCategory
  • Pannel 面板,这个是一组菜单的集合,office里面板都会有个面板标题,显示在面板最下方,面板之后就是工具栏按钮(Action)
  • Application Button 应用按钮,标签栏最左边的按钮(word就是对应文件按钮),这个按钮会触发一些特殊的页面或菜单,对应SARibbonApplicationButton,可以隐藏
  • Quick Access Bar 快速响应栏,位于最顶部的一个简单工具栏,用于放置一些常用的action,对应SARibbonQuickAccessBar
  • Gallery 预览控件,这是Ribbon最吸引眼球的控件,用直观的图像把功能显示出来,甚至有些会根据上下文进行实时渲染,典型的就是word开始标签下的样式选择,对应SARibbonGallery

Office布局模式——SARibbonBar::OfficeStyle

此模式和Office的Ribbon样式一致,office的word界面截图如下
在这里插入图片描述
SARibbon OfficeStyle的布局如下图所示:
在这里插入图片描述

这个布局和office的默认布局是一致的

WPS布局模式——SARibbonBar::WpsLiteStyle

此模式和Office的Ribbon样式有区别,参考了WPS的ribbon界面做法,把office ribbon较占空间的标题栏进行利用,实现了界面的最大利用,这个模式下可以减少一个标题栏的高度,WPS模式截图如下:

这个图时WPS对ribbon的第一次更改,wps对ribbon的第二次改动,在行数这一节会有介绍

在这里插入图片描述
wps模式布局:
在这里插入图片描述

pannel的布局

在标准的pannel中,一个action(按钮)有3种布局,以office word为例,pannel的三种布局其实是所占行数:

第一种,占满整个pannel,只有一行,称之为large
第二种,一个pannel下放置两行,称之为medium
第三种,一个pannel放置3行内容,称之为samll

在这里插入图片描述
因此,pannel的布局其实归根结底就是行数,SARibbon一开始是用QGridLayout来对pannel进行布局的,把grid分割为6行,large模式下占全部6行,medium模式下占据3行,small模式下占据2行,后续参考QToolBar的源码,重新实现了pannel的自定义布局。

行数

上一节讲到了pannel的布局,pannel布局一个很关键的点就是行的概念,行的不同定义,会影响整个显示效果。
在高版本的wps中,为了进一步缩减ribbon bar的高度,把ribbon的3行按钮改为了2个,这样使得ribbon bar进一步缩减,对应action不多的category显得会更饱满,相当于只有medium,没有small模式。这是WPS对ribbon的第二次布局更改,新版WPS的截图如下:

在这里插入图片描述
通过这个改动,机智挖掘了ribbon的高度,SARibbon支持这几种ribbon样式,引入了行数的概念,在SARibbonBar::RibbonStyle的枚举中带TwoRow结尾的都是指代2行模式。

/**
* @brief 定义ribbon的风格,第一字节代表样式,第二字节代表是否是2行
*/
enum RibbonStyle {
    OfficeStyle		= 0x0000        ///< 类似office 的ribbon风格
    , WpsLiteStyle		= 0x0001        ///< 类似wps的紧凑风格
    , OfficeStyleTwoRow	= 0x0100        ///< 类似office 的ribbon风格 2行工具栏 三行布局模式,office就是三行布局模式,pannel能布置3行小toolbutton,默认模式
    , WpsLiteStyleTwoRow	= 0x0101        ///< 类似wps的紧凑风格  2行工具栏
};

枚举SARibbonPannelItem::RowProportion是为了表征每个窗体在pannel所占行数的情况,在pannel布局中会常用到,这个枚举定义如下:

/**
    * @brief 定义了行的占比,ribbon中有large,media和small三种占比
    */
enum RowProportion {
    None            ///< 为定义占比,这时候将会依据expandingDirections来判断,如果能有Qt::Vertical,就等同于Large,否则就是Small
    , Large         ///< 大占比,一个widget的高度会充满整个pannel
    , Medium        ///< 中占比,在@ref SARibbonPannel::pannelLayoutMode 为 @ref SARibbonPannel::ThreeRowMode 时才会起作用,且要同一列里两个都是Medium时,会在三行中占据两行
    , Small         ///< 小占比,占SARibbonPannel的一行,Medium在不满足条件时也会变为Small,但不会变为Large
};

SARibbonPannel里管理的每个action都会带有一个占位的属性(SARibbonPannelItem::RowProportion),这个占位属性决定了这个action在pannel里的布局。

下面针对不同行数进行详细介绍。

3行模式

三行模式是传统的pannel布局方式,如下图所示:

在这里插入图片描述
3行模式下有三种占位(SARibbonPannelItem::RowProportion),分别为large、medium和small

  • large大占比,一个widget的高度会充满整个pannel
  • medium中占比,pannel里一列放置2个窗体,前提是这一列2个都是medium,否则会显示异常(暂时还未做medium条件降级到small的处理,后续会实现)
  • small小占比,pannel里一列放置3个窗体
    3行模式下的pannel会显示pannel的标题在Pannel Title区域,另外还有一个OptionAction的区域,这个是给这个action添加特殊触发使用的,如果没有设置OptionAction,这个区域是隐藏。

三行模式最经典的布局就是word:

在这里插入图片描述

2行模式

两行模式是传统的WPS的改进布局法(具体是否是WPS首先这样做的不清楚,我是按照WPS的布局进行参考的),如下图所示:
在这里插入图片描述
2行模式下medium和small占位(SARibbonPannelItem::RowProportion)是一样的,不做区分。

另外两行模式下pannel是不显示标题的。

2行模式是按照WPS的2020进行参考编写的,WPS2020的截图如下:

在这里插入图片描述


http://www.kler.cn/a/13371.html

相关文章:

  • nssctf web 入门(10)
  • 跨平台科学应用程序:QtiPlot 1.X Crack
  • MySQL数据库从入门到精通学习第2天(创建数据库)
  • 说过的话就一定要办到 - redo日志
  • beef-xss浏览器劫持
  • tomcat作业
  • Ceph入门到精通-Ceph 服务管理之OSD服务
  • 带有时钟使能和同步清零的D触发器
  • 基于Java+SpringBoot+Vue前后端分离仓库管理系统设计实现
  • leetcode-数据库题
  • C语言实现栈--数据结构
  • GitHub新手用法详解【适合新手入门-建议收藏!!!】
  • 如何为Google Play的应用制作宣传视频
  • 安卓SDK和安卓版本的对应关系
  • 《安富莱嵌入式周报》第310期:集成大语言模型的开源调试器ChatDBG, 多功能开源计算器,M7内核航空航天芯片评估板, Zigbee PRO规范
  • mmsegmentation 训练自己的数据集
  • 2023年3月 青少年软件编程(C 语言) 等级考试试卷(一级)
  • Cache;高速缓冲存储器
  • CMD命令学习整理
  • 综合能源系统中基于电转气和碳捕集系统的热电联产建模与优化研究(Matlab代码实现)