一文全面了解 wxWidgets 布局器(Sizers)

news2024/12/23 15:10:31

目录

Sizers背后的理念

共同特征

最小大小

边框

对齐方式

伸缩因子

使用 Sizer 隐藏控件

wxBoxSizer

wxStaticBoxSizer

wxGridSizer

wxFlexGridSizer


布局器(Sizers),由wxWidgets类层次结构中的wxSizer类及其派生类表示,已成为wxWidgets中定义对话框控件布局的首选方法。这是因为它们能够创建视觉上吸引人的对话框,而不受平台限制,同时考虑到各个控件的大小和样式差异。

本文将描述和展示使用sizers可以做什么。随后的部分将简要介绍如何使用单独的sizer类进行编程。

关于能够描述基于sizer的对话框的wxWidgets资源系统的信息,请参阅基于XML的资源系统(XRC)。

另请参阅:wxSizerwxBoxSizerwxStaticBoxSizerwxStdDialogButtonSizerwxWrapSizerwxGridSizerwxFlexGridSizerwxGridBagSizer

Sizers背后的理念

wxWidgets中Sizers使用的布局算法与其他GUI工具包(如Java的AWT、GTK工具包或Qt工具包)中的布局系统密切相关。它基于单个子窗口报告其所需的最小大小以及如果父窗口大小发生变化时它们能够伸展的能力。这通常意味着程序员不需要设置对话框的初始大小,而是将sizer分配给对话框,并查询这个sizer以获得推荐的大小。反过来,这个sizer将查询其子元素(可以是普通的窗口、空白空间或其他sizer),以便构建sizer的层次结构。请注意,wxSizer不是从wxWindow派生的,因此不会干扰标签顺序,与屏幕上的真实窗口相比,它所需的资源非常少。

使得sizer在wxWidgets中如此适合使用的事实是,每个控件都报告自己的最小大小,并且该算法可以毫无问题地处理不同平台上字体大小或不同窗口(对话框项)大小之间的差异。例如,如果Linux/GTK小部件的标准字体和整体设计需要比Windows更多的空间,那么在Linux/GTK上的初始对话框大小将自动比Windows上的大。

目前,wxWidgets中有七种不同类型的sizer可用。每一种都代表了在对话框中以某种方式布局对话框项,或者完成特殊任务,如将一个静态框包装在对话框项(或另一个sizer)周围。这些sizer将在下面的文本中逐一讨论。有关如何使用sizer进行编程的更多详细信息,请参阅wxBoxSizer部分。

共同特征

所有sizer都是容器,即它们用于布局一个对话框项(或几个对话框项),这些项包含在sizer中。这些项有时被称为sizer的子项。无论各个sizer如何布局其子项,所有子项都有某些共同的特征:

最小大小

这个最小大小通常与控件的初始大小相同,可以在控件构造函数的wxSize字段中明确设置,或者由wxWidgets计算得出,通常是通过将项目的高度和/或宽度设置为-1。请注意,只有一些控件可以计算其大小(如复选框),而其他控件(如列表框)没有自然的宽度或高度,因此需要明确指定大小。有些控件可以计算其高度,但不能计算其宽度(例如单行文本控件):

边框

边框只是空白空间,用于在对话框中分隔对话框项。这个边框可以是全方位的,也可以是任何组合的一侧,例如仅位于控件的上方和下方。这个边框的厚度必须明确设置,通常是5个点。以下示例展示了只有一个对话框项(一个按钮)以及围绕按钮的0、5和10像素的边框:

对齐方式

通常,对话框项会被分配比其最小大小加上边框更多的空间。根据用于相应对话框项的标志,对话框项可以填充所有可用空间,即它会增长到比最小大小更大的尺寸,或者它会移动到可用空间的中心或空间的任一侧。以下示例展示了水平盒子sizer中的一个列表框和三个按钮;一个按钮居中对齐,一个顶部对齐,一个底部对齐:

伸缩因子

如果sizer包含多个子项,并且被提供的空间多于其子项和它们的边框所需的空间,就会出现如何在子项之间分配剩余空间的问题。为此,可以为每个子项分配一个伸缩因子,其中默认值为0表示子项不会获得比其请求的最小大小更多的空间。大于零的值是根据相应sizer子项中所有伸缩因子的总和来解释的,即如果两个子项都获得伸缩因子1,它们将各自获得一半的额外空间,无论一个控件的最小尺寸是否比另一个差。以下示例展示了一个包含三个按钮的对话框,第一个按钮的伸缩因子为1,因此会拉伸,而其他两个按钮的伸缩因子为0,保持其初始宽度:

使用 Sizer 隐藏控件

你可以使用 wxWindow::Show() 方法来隐藏 sizer 中的控件,就像隐藏任何其他控件一样。然而,wxSizer 也提供了一个独立的方法,可以告诉 sizer 在其大小计算中不考虑该控件。要使用 sizer 隐藏窗口,请调用 wxSizer::Show()。然后,你必须调用 sizer 上的 Layout 方法来强制更新。

这在隐藏界面部分时很有用,因为你可以避免从 sizer 中移除控件并稍后重新添加它们。

注意:这仅由 wxBoxSizer 和 wxFlexGridSizer 支持。

wxBoxSizer

wxBoxSizer 可以根据其构造函数中使用的标志将其子项垂直或水平排列。当使用垂直 sizer 时,每个子项可以居中对齐、右对齐或左对齐。相应地,当使用水平 sizer 时,每个子项可以居中对齐、底部对齐或顶部对齐。上一节中描述的伸缩因子用于主要方向,即当使用水平 box sizer 时,伸缩因子决定了子项可以水平拉伸多少。以下示例展示了与上一个示例相同的对话框,但 box sizer 现在是一个垂直 box sizer:

wxStaticBoxSizer

wxStaticBoxSizer 与 wxBoxSizer 相同,但周围有一个静态框。以下是一个示例:

wxGridSizer

wxGridSizer 是一个二维 sizer。所有子项都被赋予相同的大小,这是由最大的子项所需的最小大小决定的,在这种情况下是左下角边框中的文本控件。列数或行数中的任何一个是固定的,如果添加了新的子项,网格 sizer 将在相应的另一个方向上增长:

wxFlexGridSizer

wxFlexGridSizer 是从 wxGridSizer 派生出的二维 sizer。每列的宽度和每行的高度都是根据各自最大子项的最小要求单独计算的。此外,如果 sizer 被分配了一个与其请求的大小不同的尺寸,可以声明列和行是可伸缩的。以下示例显示了与上面相同的对话框,但使用了 flex 网格 sizer:

--- END ---

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

社会信用示范城市信用代码和虚拟变量(1990-2022年)

01、数据介绍 数据名称:社会信用示范城市信用代码和虚拟变量 数据年份:1990-2022年 计算说明: 数据来源: 时间跨度:1990-2023 年 区域范围:上市公司所属城市范围 参考文献: [1]曹雨阳,孔东…

树莓派控制步进电机(下):软件编程

目录 说明 软件编程 树莓派的RPI编程 基本测试程序 参考文献 说明 在上一篇博文中我们介绍了树莓派控制步进电机所需要的硬件连接,本篇博文主要介绍软件编程。这里我们使用的是树莓派4B开发板,步进电机为6线两相步进电机,驱动器采用的是…

【强训笔记】day6

NO.1 思路:因为存的字符串高位存放的是低下标,所以输出的字符串必须先翻转。 代码实现: class Solution { public:string solve(string s, string t) {string ret;int is.size()-1,jt.size()-1;int tmp0;while(i>0||j>0||tmp){if(i&…

【C++】学习笔记——模板

文章目录 三、内存管理4. operator new与operator delete函数5. new 和 delete 的实现原理1. 内置类型2. 自定义类型3. malloc/free和new/delete的区别 四、模板初阶1. 泛型编程模板实例化 未完待续 三、内存管理 4. operator new与operator delete函数 我们之前学到&#xf…

富唯智能案例|双3D相机引导衔架抓取铝型材

随着制造业的快速发展和自动化水平的不断提升,铝型材的自动化抓取和加工成为行业内的一大技术难题。铝型材因其轻便、耐腐蚀、易加工等特点,广泛应用于建筑、汽车、电子等领域。然而,铝型材的形状多样、尺寸不一,以及生产线上的高…

Spring Cloud——LoadBalancer

Spring Cloud——LoadBalancer 一、负载均衡(LoadBalance)1.LoadBalancer本地负载均衡客户端 VS Nginx服务端负载均衡区别 二、LoadBalancer1.Spring RestTemplate as a LoadBalancer Client2.编码使用DiscoveryClient动态获取所有上线的服务列表3.从默认…

详细分析Java中的脱敏注解(附Demo)

目录 前言1. 基本知识2. 核心逻辑3. Demo4. 模版 前言 对于隐私信息,需要做特殊处理,比如身份证或者手机号等 对于Java的相关知识推荐阅读:java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全) 1. 基本知…

【4/26-4/30】 Arxiv安全类文章速览

4/26 标题: Merchants of Vulnerabilities: How Bug Bounty Programs Benefit Software Vendors 作者: Esther Gal-Or, Muhammad Zia Hydari, Rahul Telang摘要: 软件漏洞允许恶意黑客利用,威胁系统和数据安全。本文研究了激励道德黑客发现并负责任地向软件供应商披…

[PS小技能学习]抠图和切图

详情见视频教程:PS小技巧--抠图与切图 今天我们来学习如何使用PS对表情包合辑进行抠图和裁剪保存 1、首先,将图片导入,双击图层新建一个图层 2、然后点击工具栏的魔棒工具,再点击顶部菜单栏的添加到选区 3、点击图片的空白区域即…

spring boot学习第十八篇:使用clickhouse

1、pom.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://…

目标检测算法YOLOv3简介

YOLOv3由Joseph Redmon等人于2018年提出&#xff0c;论文名为&#xff1a;《YOLOv3: An Incremental Improvement》&#xff0c;论文见&#xff1a;https://arxiv.org/pdf/1804.02767.pdf &#xff0c;项目网页&#xff1a;https://pjreddie.com/darknet/yolo/ 。YOLOv3是对YOL…

我独自升级崛起怎么注册?新手一看就会的注册方法

《我独自升级&#xff1a;ARISE》是网石旗下一款以网漫《我独自升级》IP开发的ARPG&#xff0c;游戏中&#xff0c;玩家会成为漫画主角程肖宇进行战斗&#xff0c;并通过升级使用更多技能和武器&#xff0c;打造出属于自己的战斗风格。同时&#xff0c;游戏中还将体现原作的核心…

2.1 Java全栈开发前端+后端(全栈工程师进阶之路)-前端框架VUE3-基础-初识Vue

Vue概述 早期前后端分离模式 早期的前后端分离开发模式是这样的&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&l…

blender(布兰德)下载安装-windows系统安装

1.简单介绍 这些介绍都是一些百科或官网提供的内容&#xff0c;直接搜索对应的信息后即可看到。Blender&#xff08;布兰德&#xff09;是一款永久开源免费的3D创建套件。支持整个3D创作流程&#xff1a;建模、雕刻、骨骼装配、动画、模拟、实时渲染、合成和运动跟踪&#xff…

基于Spring Boot的校园闲置物品交易网站设计与实现

基于Spring Boot的校园闲置物品交易网站设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 系统功能界面图&#xff0c;在系统首页可以查看…

Java线上CPU内存冲高问题排查步骤

01 引言 作为一名从事Java开发快一年的程序员&#xff0c;在线上经常碰到某个模块的Pod发出CPU与内存告警的问题&#xff0c;而这些问题会导致系统响应缓慢甚至是服务不可用。一般情况下可以通过重启或者调高Pod的资源量或者增加Pod数量暂时解决问题&#xff0c;但这是治标不治…

【C++】拷贝复制:拷贝构造函数的使用

欢迎来到CILMY23的博客 本篇主题为&#xff1a;拷贝复制&#xff1a;拷贝构造函数的使用 博客主页&#xff1a;CILMY23-CSDN博客 个人专栏&#xff1a;Python | C | C语言 | 数据结构与算法 感谢观看&#xff0c;支持的可以给个一键三连&#xff0c;点赞关注收藏。 写在前头…

RCE学习(一)

一.知识点 RCE&#xff1a;远程命令/代码执行漏洞&#xff0c;简称为RCE漏洞&#xff0c;可以直接向服务器后台远程注入操作系统的命令或者代码&#xff0c;从而拿到服务器后台的权限。RCE分为远程执行命令&#xff08;执行ping命令&#xff09;和远程代码执行eval 简单来说就…

【数据结构】时间复杂度和空间复杂度解析

数据结构前言&#xff1a; 1. 什么是数据结构 打个比方来说不同的数据就相当于不同的书籍&#xff0c;我们经常在图书馆可以看到不同类别的书籍会被整理放在书架上方便查看存放&#xff0c;数据结构就是一种计算机存储管理数据的方式。 2. 什么是算法 算法就是一系列的计算…

蓝桥杯练习系统(算法训练)ALGO-953 混合积

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 众所周知&#xff0c;人人都在学习线性代数&#xff0c;既然都学过&#xff0c;那么解决本题应该很方便。   宇宙大战中&…