num_duilib之TabBox用法(21)
介绍
- 本文将介绍 使用 TabBox的用法
- 更多用法,请参考源码
TabBox.h 文件
文件中定义了公有接口,其中包括,添加tab页下的控件,删除、设置TabBox的属性
其中,我常用的有:GetCurSel、SelectItem 和 SetAttribute
其中,源码如下, 注释很完备,一看就看懂
/// 重写父类方法,提供个性化功能,请参考父类声明
virtual bool Add(Control* pControl) override;
virtual bool AddAt(Control* pControl, std::size_t iIndex) override;
virtual bool Remove(Control* pControl) override;
virtual bool RemoveAt(std::size_t iIndex) override;
virtual void RemoveAll() override;
virtual void SetAttribute(const std::wstring& strName, const std::wstring& strValue) override;
/**
* @brief 获取当前选择项
* @return 返回当前选择项索引
*/
int GetCurSel() const;
/**
* @brief 根据控件索引选择一个子项
* @param[in] iIndex 要选择的子项索引
* @return 成功返回 true,否则返回 false
*/
bool SelectItem(int iIndex);
/**
* @brief 根据控件指针选择一个子项
* @param[in] pControl 要选择的子项指针
* @return 成功返回 true,否则返回 false
*/
bool SelectItem(Control* pControl);
/**
* @brief 根据控件名称选择一个子项
* @param[in] pControlName 要选择的控件名称
* @return 成功返回 true,否则返回 false
*/
bool SelectItem(const std::wstring& pControlName);
/**
* @brief 设置是否显示动画效果
* @param[in] bFadeSwitch 设置为 true 则显示,false 为不显示动画
* @return 无
*/
void SetFadeSwitch(bool bFadeSwitch);
/**
* @brief 判断是否需要显示动画效果
* @return 返回 true 显示动画,false 为不显示动画效果
*/
bool IsFadeSwitch() { return m_bFadeSwith; }
一个样式
TabBox它个布局控件,不过只能同时只能选择一个; 它默认没有类似MFC的tab按钮可以点击,不过,我用了 Option按钮代替。 每个tab页下有两个按钮。
tab1

tab2

tab3

xml中定义
xml中定义如下
tab page 按钮,
option按钮
<HBox height="30">
<Option class="checkbox_push" text="tab1" name="page_1" group="selct_tab" selected="true"/>
<Option class="checkbox_push" text="tab2" name="page_2" group="selct_tab" />
<Option class="checkbox_push" text="tab3" name="page_3" group="selct_tab" />
</HBox>
TabBox控件
TabBox控件定义如下,我用了水平布局分别定义了每个tab窗口下显示的内容
<TabBox width="stretch" height="stretch" name="tab_show" selectedid="0" >
<HBox bkcolor="dark_gray">
<Option class="checkbox_push" text="1" group="selct_tab2" />
<Option class="checkbox_push" text="2" group="selct_tab2" />
</HBox>
<HBox bkcolor="light_green">
<Option class="checkbox_push" text="3" group="selct_tab1" />
<Option class="checkbox_push" text="4" group="selct_tab1" />
</HBox>
<HBox bkcolor="blue">
<Option class="checkbox_push" text="5" group="selct_tab3" />
<Option class="checkbox_push" text="6" group="selct_tab3" />
</HBox>
</TabBox>
代码关联
option关联
定义如下
ui::Option* tab_page_arr_[3] = { nullptr };
与界面控件关联
// 1.用option代替tab页
std::wstring page_btn_name_arr[] = {L"page_1", L"page_2", L"page_3" };
auto find_func = [&](ui::Option* pdst, const std::wstring name)
{
// 先找到控件
ui::Control* ppage_tmp = FindControl(name);
if (ppage_tmp)
{
// 找到控件再绑定点击处理函数
pdst = dynamic_cast<ui::Option*> (ppage_tmp);
if (pdst)
pdst->AttachSelect(nbase::Bind(&BasicForm::OnTabPageClicked, this, std::placeholders::_1));
}
};
find_func(tab_page_arr_[0], page_btn_name_arr[0]);
find_func(tab_page_arr_[1], page_btn_name_arr[1]);
find_func(tab_page_arr_[2], page_btn_name_arr[2]);
其中,OnTabPageClicked函数体如下:
bool BasicForm::OnTabPageClicked(ui::EventArgs* msg)
{
if (NULL == msg || nullptr == msg)
return false;
static std::map<std::wstring, int> map_page_name = { {L"page_1", 0}, {L"page_2", 1}, {L"page_3", 2} };
// 1. 获取控件的名字
std::wstring name = msg->pSender->GetName();
// 2.寻找索引
std::map<std::wstring, int>::iterator it = map_page_name.find(name);
// 找到了就设置当前选中的是哪一个tab
if (it != map_page_name.end())
if (tab_box_)
tab_box_->SelectItem(it->second);
return false;
}
TabBox关联
// 2.关联tabbox控件
ui::Control* pcontrol_2 = FindControl(L"tab_show");
if (pcontrol_2)
tab_box_ = dynamic_cast<ui::TabBox*>(pcontrol_2);
num_duilib之TabBox用法(21)的更多相关文章
- Mybatis-Plus 实战完整学习笔记(九)------条件构造器核心用法大全(上)
一.Mybatisplus通用(公共方法)CRUD,一共17种(3.0.3版),2.3系列也是这么多,这个新版本一定程度进行了改造和删减. 二.构造器UML图(3.0.3)-----实体包装器,主要用 ...
- JSP目录
JSP目录 课时1 jsp概述和背后原理31:11 课时2 三种jsp的scriptlet语法27:29 课时3 jsp的注释14:00 课时4 JSP4个域对象的作用域3 ...
- Boost程序库完全开发指南——深入C++“准”标准库(第3版)
内容简介 · · · · · · Boost 是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉. Boost 由C++标准委员会部分成员所设立的Bo ...
- mysql语法总结及例子
1. DDL相关 a. -- 查询所有数据库 show databases;-- 删除数据库drop database ladeng; b. -- use `数据库名称`; 表示使用此数据库 use ...
- 小白—职场之Java基础篇
java基础篇 java基础 目录 1.java是一种什么语言,jdk,jre,jvm三者的区别 2.java 1.5之后的三大版本 3.java跨平台及其原理 4.java 语言的特点 5.什么是字 ...
- Java 复习整理day05
1 package com.it.demo01_oop; 2 3 import java.util.Arrays; 4 5 /* 6 案例: 演示面向过程和面向对象代码的区别 7 8 面向过程编程思想 ...
- 21.xpath定位中id 、starts-with、contains、text()和last() 的用法
xpath语法:id .starts-with.contains.text()和last() 的用法 <input id="su" class="bg s_btn ...
- 21.Python算术运算符及用法详解
算术运算符是处理四则运算的符号,在数字的处理中应用得最多.Python 支持所有的基本算术运算符,如表 1 所示. 表 1 Python常用算术运算符 运算符 说明 实例 结果 + 加 12.45 + ...
- [mybatis]Example的用法 标签: mybatis 2017-05-21 21:46 651人阅读 评论(11)
Example类是什么? Example类指定如何构建一个动态的where子句. 表中的每个non-BLOB列可以被包括在where子句中. 例子是展示此类用法的最好方式. Example类可以用来生 ...
随机推荐
- 洛谷 P6030 - [SDOI2012]走迷宫(高斯消元+SCC 缩点)
题面传送门 之所以写个题解是因为题解区大部分题解的做法都有 bug(u1s1 周六上午在讨论区里连发两个 hack 的是我,由于我被禁言才让 ycx 代发的) 首先碰到这种期望题,我们套路地设 \(d ...
- 回文字符串 Manacher
1. Manacher 忘光了,忘光了. 首先将字符串所有字符之间(包括头尾)插入相同分隔符,再在最前方插入另一个分隔符防止越界. 设以 \(s_i\) 为对称中心的回文串中,最长的回文半径为 \(p ...
- 3D-DNA 挂载染色体
3D-DNA是一款简单,方便的处理Hi-C软件,可将contig提升到染色体水平.其githup网址:https://github.com/theaidenlab/3d-dna 3D-DNA流程简介 ...
- R语言hist重叠图作法
set.seed(1) h1<-hist(rnorm(1000,100,5)) h2<-hist(rnorm(1000,99,5)) plot(h2,col=rgb(255,0,0,50, ...
- sig mesh 培训-18304
1.mesh 的传输速率 ---有效数据最长的长度是10个字节 ---最小时间间隔是10ms,重传1次 --建议数据包之间不少于100ms 1S = 10*10 =100个字节 2.目前telink ...
- URLDNS分析
学习了很久的Java基础,也看了很多的Java反序列化分析,现在也来分析学习哈最基础的URLDNS反序列化吧. Java反序列化基础 为了方便数据的存储,于是乎有了现在的Java序列化于反序列化.序列 ...
- 利用charles映射解决夜神模拟器安装xposed-v89-sdk25-x86.zip
最近在玩xposed框架,前前后后搞了两天,浪费一个周末,总算把踩过的坑都踩了一遍.. 比如大家肯定遇到的的一个问题:夜神模拟器打开xposed安装器之后,为什么下载不了xposed-v89-sdk2 ...
- java四则运算规则
java四则运算规则 1.基本规则 运算符:进行特定操作的符号.例如:+ 表达式:用运算符连起来的式子叫做表达式.例如:20 + 5.又例如:a + b 四则运算: 加:+ 减:- 乘:* 除:/ 取 ...
- C/C++ Qt 数据库与ComBox多级联动
Qt中的SQL数据库组件可以与ComBox组件形成多级联动效果,在日常开发中多级联动效果应用非常广泛,例如当我们选择指定用户时,我们让其在另一个ComBox组件中列举出该用户所维护的主机列表,又或者当 ...
- Oracle—全局变量
Oracle全局变量 一.数据库程序包全局变量 在程序实现过程中,经常用遇到一些全局变量或常数.在程序开发过程中,往往会将该变量或常数存储于临时表或前台程序的全局变量中,由此带来运行效率降 ...