YStudio Y++

面板

Y++ / YStudio 开发文档 · 一点滴

多段可折叠容器(手风琴):一个「面板」控件内含多段,每段有标题条与内容区;子控件挂到指定段。可放入水平/垂直布局。

与下方控件的关系(对齐 Qt 布局): 窗体上绝对摆放时,面板变高不会「推开」下面的兄弟控件(会重叠)。请把「面板 + 其下方要跟着走的控件」放进同一垂直布局;展开/收起后布局按面板当前高度重排。高度模式建议用「跟随展开」。段内的按钮等应挂到对应段(所属容器 面板名:段号),不要放在面板外却叠在内容区坐标上。

设计态全收起时外框会缩到标题总高(避免蓝框幽灵高度把下方控件误认成段内子控件,导致「无法垂直布局」)。再点某段标题展开时,会还原收起前的设计高度。段标题右侧有展开/收起箭头(与运行时一致)。

放入垂直布局后:面板按当前内容高占位(收起则收回、展开则推开下方控件),不会像普通堆叠那样 Fill 吃掉布局剩余空档——这与 Qt 里 sizeHint 随折叠变化、布局重排的行为一致。若仍要「占满中间空档」,给面板属性「拉伸」设为 ≥1(或中间加弹簧)。

旁路插件:plugins/controls.panel/。需授权开通后,在工具箱「布局」组中拖入。

语言侧类名:面板类(底座仍为堆叠 + plugin:panel,不新增控件枚举)。

硬约束

  1. 控件名来自窗口 XML「名称」字段,代码里直接写标识符。
  2. 属性赋值用 =,方法调用必须带括号。
  3. 「手风琴」为真时:同一面板控件内展开一段会收起其它段。

设计器

操作 / 属性 说明
右键 → 添加面板 追加一段
右键 → 删除面板 删除当前设计段(至少保留一段;段内有子控件时需先清空)
右键 → 设置面板列表 / 属性「段列表」 编辑段:文本、图标、禁用、右侧按钮、展开、角标、角标色(角标色可点色盘)
单击段标题 切换当前设计段(展开该段内容区以便拖入子控件)
手风琴 真=互斥展开(默认);假=可同时展开多段
高度模式 0=固定高度(设计高为上限:有内容的展开段可垫满剩余高;空展开段不垫空白;内容更高则整板滚动;全收起/更矮则缩框),1=跟随展开(外框始终贴内容,布局内推荐)
拉伸 布局主轴权重;0=只按内容高占位(默认);≥1=吃掉垂直/水平布局剩余空档
标题高度 段标题条高度(像素);0=自动(约字号+10,至少 26);自定义填 16~120(勿填 1~15)
段间距 相邻段之间的间距(像素);默认 0;属性面板或 段间距 / 置段间距
可关闭 真=运行时段标题显示 ×,点击删段并触发事件
可拖拽排序 真=运行时可拖段标题调整顺序
拖拽动画 幽灵交换(默认)/ 无;仅「可拖拽排序」开启时有感
标题字体 / 字号 / 颜色 控件级默认标题样式;段列表「A」可设每段字体(含粗斜体/删除线)

子控件「所属容器」形如 面板1:0(第 0 段)。

段列表字段

标题|图标|禁用|右侧按钮|展开|…;有角标时写 @V4(保留展开位)。

字段 含义
右侧按钮 1=显示「…」;点击触发「段按钮点击」,不自动删/折
展开 1=默认展开
角标 / 角标色 标题右侧胶囊;色支持 #RRGGBB

无子控件且未指定默认高的展开段内容高为 0(标题紧贴)。有子控件时最小内容高 48。手风琴开启时:全部段标题始终同屏可见,不出现整板滚动条;固定高度下展开段占满「外框 − 全部标题」;跟随展开则外框贴内容,后段标题紧跟在展开段下方。非手风琴且多段同时展开、总高超过设计高时:外框先锁设计高并出整板滚动条(可拖/滚轮);窗口再拉高时面板自动吃剩余空间直到内容总高,减少空白。仅设置了段最大高且内容更高时才段内滚动。


属性 / 方法 / 事件

名称 类型 说明
手风琴 逻辑 真=互斥展开
高度模式 整数 0=固定上限(可整体滚;矮则收缩),1=跟随展开
拉伸 整数 布局权重;0=按内容高(默认);≥1=吃剩余空档
标题高度 整数 0=自动;自定义 16~120
段间距 整数 相邻段间距像素,默认 0
可关闭 逻辑 真=显示关闭钮
可拖拽排序 逻辑 真=可拖标题排序
拖拽动画 整数 0=幽灵交换(默认),1=无;也可用 置拖拽动画 / 取拖拽动画
段列表 文本 见上表
添加面板([标题]) 方法 末尾追加段,返回新段索引
删除面板(索引) 方法 删除指定段(至少保留一段)
取面板数() 方法 返回段数
置面板标题 / 取面板标题 方法 读写段标题
置展开 / 取展开 方法 读写段展开态
置标题高度 / 取标题高度 方法 读写段标题条高度
置段间距 / 取段间距 方法 读写相邻段间距
置段内容高 / 取段内容高 方法 默认内容高,0=自动
置段最大高 / 取段最大高 方法 最大内容高,0=不封顶
展开改变 事件 参数:整数 索引, 整数 状态
段按钮点击 事件 参数:整数 索引(「…」钮)
即将关闭段 事件 参数:整数 索引(× 按下、删除前)
段关闭 事件 参数:整数 索引(已删除)
段顺序改变 事件 参数:整数 原索引, 整数 新索引
函数 面板1.展开改变(整数 索引, 整数 状态) {
    输出(到文本(索引) + " → " + 到文本(状态))
}

函数 面板1.段顺序改变(整数 原索引, 整数 新索引) {
    输出("排序 " + 到文本(原索引) + " → " + 到文本(新索引))
}

面板1.手风琴 = 真
面板1.可关闭 = 假
面板1.可拖拽排序 = 真
面板1.拖拽动画 = 0
面板1.置拖拽动画(0) // 0=幽灵交换,1=无
面板1.高度模式 = 0
面板1.标题高度 = 32
面板1.段间距 = 4
整数 i = 面板1.添加面板("高级")
面板1.置展开(i, 真)
面板1.置标题高度(28)
面板1.置段间距(8)

相关

  • 工具箱「布局」组中的分割器(可拖分栏)