简述

QToolBox类提供了一个列(选项卡式的)部件条目。

QToolBox可以在一个tab列上显示另外一个,并且当前的item显示在当前的tab下面。每个tab都在tab列中有一个索引位置。tab的item是一个QWidget 。

| 版权声明:一去、二三里,未经博主允许不得转载。

详细描述

每个item都有一个itemText()、一个可选的itemIcon()、一个可选的itemToolTip()、和一个widget()函数 。item的属性可以通过setItemText()、setItemIcon()、和setItemToolTip()来改变,并且每个item可以通过setItemEnabled()单独设置为是否可用。

Item的添加使用addItem(),或通过insertItem()在特定位置插入。如果要获取items的总数,可以调用count()函数。Item可以使用removeItem()从toolbox中删除。结合removeItem()和insertItem(),允许你将item移动到不同的位置。

当前item部件的索引由currentIndex()返回,并使用setCurrentIndex()来设置。一个特定item的索引可以使用indexOf()来获取,item()则返回给定索引的item。

当前的item发生变化时,会发射currentChanged()信号。

使用

玩穿越,谁不会呀!O(∩_∩)O哈哈~

梦回经典,创建一个金庸老先生的武侠传。主要分为三组:大美女、大英雄、大恶人。

人物属性:会员、名字、图像、个人说明。

古代人其实也蛮拼的,办会员,好让别人更了解TA、关注TA。。。

效果

源码

#include <QToolBox>
#include <QGroupBox>
#include <QLabel>
#include <QHBoxLayout>class ToolBox : public QToolBox
{Q_OBJECTpublic:ToolBox(QWidget *parent = 0): QToolBox(parent){initUI();// 连接信号槽connect(this, &QToolBox::currentChanged, this, &ToolBox::onCurrentChanged);}private:void initUI() {struct User {bool bVIP;  // 会员QString strName;  // 名字QString strIcon;  // 图像QString strDesc;  // 个人说明} user[3][5] ={{{true, QStringLiteral("香香公主"), ":/QQ/1", QStringLiteral("金庸笔下的第一美女")},{true, QStringLiteral("小龙女"), ":/QQ/2", QStringLiteral("玉女心经")},{true, QStringLiteral("王语嫣"), ":/QQ/3", QStringLiteral("熟读各派武学秘笈")},{false, QStringLiteral("赵敏"), ":/QQ/4", QStringLiteral("大元第一美人")},{false, QStringLiteral("周芷若"), ":/QQ/5", QStringLiteral("光复汉家河山,光大峨嵋")}},{{true, QStringLiteral("萧峰"), ":/QQ/6", QStringLiteral("丐帮帮主 - 智勇双全、胆略过人、豪迈飒爽")},{true, QStringLiteral("令狐冲"), ":/QQ/8", QStringLiteral("独孤九剑")},{true, QStringLiteral("杨过"), ":/QQ/9", QStringLiteral("黯然销魂掌")},{false, QStringLiteral("郭靖"), ":/QQ/7", QStringLiteral("降龙十八掌")},{false, QStringLiteral("胡一刀"), ":/QQ/10", QStringLiteral("辽东大侠")}},{{true, QStringLiteral("金轮法王"), ":/QQ/11", QStringLiteral("龙象般若功")},{true, QStringLiteral("丁春秋"), ":/QQ/13", QStringLiteral("星宿老仙,法力无边")},{false, QStringLiteral("裘千仞"), ":/QQ/12", QStringLiteral("铁掌水上飘")},{false, QStringLiteral("成昆"), ":/QQ/14", QStringLiteral("混元霹雳手")},{false, QStringLiteral("李莫愁"), ":/QQ/15", QStringLiteral("冰魄银针,杀人如麻")}}};QStringList groupList;groupList << QStringLiteral("大美女") << QStringLiteral("大英雄") << QStringLiteral("大恶人");// 初始化列表for (int i = 0; i < sizeof(user)/sizeof(user[0]); i++){QGroupBox *pGroupBox = new QGroupBox(this);QVBoxLayout *pLayout = new QVBoxLayout(pGroupBox);// 添加好友for (int j = 0; j < sizeof(user[0])/sizeof(user[0][0]); ++j){QWidget *pWidget = initWidget(user[i][j].bVIP, user[i][j].strName,user[i][j].strIcon, user[i][j].strDesc);pLayout->addWidget(pWidget);}pLayout->addStretch();pLayout->setSpacing(10);pLayout->setContentsMargins(10, 10, 10, 10);// 添加分组addItem(pGroupBox, groupList.at(i));}}QWidget* initWidget(bool bVIP, const QString &name,const QString &icon, const QString &desc = "") {QWidget *pWidget = new QWidget(this);QLabel *pPixmapLabel = new QLabel(this);QLabel *pNameLabel = new QLabel(this);QLabel *pDescLabel = new QLabel(this);// 图像 名称 描述pPixmapLabel->setPixmap(QPixmap(icon));pNameLabel->setText(name);pDescLabel->setText(desc);// VIP名字为红色;否则,白色pNameLabel->setStyleSheet(QString("color: %1;").arg(bVIP ? "rgb(240, 30, 40)" : "white"));pDescLabel->setStyleSheet("color: gray;");QVBoxLayout *pVLayout = new QVBoxLayout();pVLayout->addStretch();pVLayout->addWidget(pNameLabel);pVLayout->addWidget(pDescLabel);pVLayout->addStretch();pVLayout->setSpacing(5);pVLayout->setContentsMargins(0, 0, 0, 0);QHBoxLayout *pHLayout = new QHBoxLayout();pHLayout->addWidget(pPixmapLabel);pHLayout->addLayout(pVLayout);pHLayout->addStretch();pHLayout->setContentsMargins(0, 0, 0, 0);pWidget->setLayout(pHLayout);return pWidget;}private slots:void onCurrentChanged(int index) {QString strGroup = itemText(index);qDebug() << strGroup;}
};

这里,我们建立了一个3行5列的二维数组,用来存储人物信息。

对于type array[A][B]形式的二维数组,可以通过计算sizeof获取行、列数。其中:

  • sizeof(array[0][0]):为一个元素占用的空间,
  • sizeof(array[0]):为一行元素占用的空间,
  • sizeof(array):为整个数组占用的空间,

那么,很容易计算出行、列数:

  • 行数 = sizeof(array)/sizeof(array[0]);
  • 列数 = sizeof(array[0])/sizeof(array[0][0]);

为了创建人物信息,我们定义了一个initWidget()函数,主要实现是创建了三个标签,分别用来显示图像、名字、个人说明。

创建完人物之后,再将他们添加至QGroupBox分组中。最后,通过addItem()添加所有的分组。这样,我们就可以和他们聊天啦^_^。

Qt 之 QToolBox相关推荐

  1. Qt之QToolBox

    简述 QToolBox类提供了一个列(选项卡式的)部件条目. QToolBox可以在一个tab列上显示另外一个,并且当前的item显示在当前的tab下面.每个tab都在tab列中有一个索引位置.tab ...

  2. QT基础之QToolBox工具盒类

    文章目录 简介 代码链接 代码展示 更多参见 QT基础与实例应用目录 简介 QToolBox提供一种列状的层叠窗体,QToolButton提供了一种快速访问命令或选择项的按钮,通常在工具条中使用.示例 ...

  3. Qt学习——利用QToolBox实现QQ好友列表

    由于写聊天软件的需要,设计此类以方便后面直接调用 使用的类 QToolBox.QGroupBox.QVBoxLayout.QToolButton.QList 设计思路 对按钮显示信息进行设置,令每个按 ...

  4. 第15.32节 PyQt(Python+Qt)入门学习:containers容器类部件QToolBox工具箱介绍及使用案例

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有 ...

  5. QT开发(六十四)——QT样式表(二)

    QT开发(六十四)--QT样式表 本文主要翻译自QT官方文档Qt Style Sheets . 五.QT样式表参考 QT样式表支持多种的属性.状态和子控件,使得定制组件的外观成为可能. 1.组件 以下 ...

  6. 用Qt写软件系列五:一个安全防护软件的制作(2)

    引言 在上一篇中讲述了主窗体的创建和设计.主窗体的无边框效果.阴影效果.拖动事件处理.窗体美化等工作在前面的博客中早就涉及,因此上篇博文中并未花费过多笔墨.这一篇继续讲述工具箱(Tool Button ...

  7. QT官方第三方开源工具

    QT官方第三方开源工具.今天再次在网上看到了QT的第三方开源工具列表,这里留下link地址,以备将来用到的时候参考使用. http://qt-project.org/wiki/Category:Add ...

  8. Qt 中容器类型的控件

    转载:https://subingwen.cn/qt/qt-containers/ 1.QWidget 这个类是所有窗口类的父类,可以作为独立窗口使用,也可以内嵌到其它窗口中使用. Qt 中的所有控件 ...

  9. Qt学习笔记之样式表

    一.概述 Qt的样式表是从Qt4.2开始引入的描述窗口部件外观的机制,类似于HTML的层叠样式表(Cascading Style Sheets,CSS).样式表在Qt的风格之上起作用(如果使用了样式表 ...

  10. Qt窗口部件——QFrame/QAbstractButton/QLineEdit/QAbstractSpinBox/QAbstractSlider

    Qt其他窗口部件 1. QFrame 1.1 QLabel 1.2 QLCDNumber 1.3 QStackedWidget 1.4 QToolBox 2. QAbstractButton 2.1 ...

最新文章

  1. docker 安装 solr搜索引擎
  2. 给定key值,在Binary Search Tree中查找最接近该键值的结点集合
  3. linux安装grub界面,系统安装: GRUB安装,配置及使用汇总
  4. 厚积薄发,丰富的公用类库积累,助你高效进行系统开发(11)---各种线程相关操作类...
  5. Ubuntu14.04 VSCode工程在root下无运行,在非root无法修改配置文件
  6. (10)Verilog HDL异步复位同步释放
  7. python 列表推导_Python 列表推导式使用的注意事项
  8. Kibana和logstash实时日志查询、收集与分析系统
  9. Ajax实现页面自动刷新实例解析
  10. 裴礼文《数学分析中的典型问题与方法》 P1~31
  11. JS之 解决fakepath问题,并实现base64图片上传(单图上传)
  12. 计算机内存die,从内存时序的角度告诉你 三星B-DIE为何成为高端所用
  13. VMWare虚拟机启动失败,显示intel VT-X处于禁用状态
  14. KS检验-如何理解KS检验中的p-value
  15. 入局智能健身镜,小度破圈进行时
  16. 码率、帧率和I B P帧
  17. 2022.5.4.学习笔记数据类型
  18. 谈谈Linux中Redis的薪火相传与反客为主及如何实现
  19. 技术总监被开除了....
  20. 基于Springboot微信点餐系统的开发与实现

热门文章

  1. Kettle使用教程(问题)
  2. git 使用 tree命令
  3. 【ASP.NET】swfuplod图片上传
  4. 银行传统支付通道与支付平台结合
  5. 新概念英语第一册1-144课(转)
  6. 菜鸟教程-maven
  7. 吴恩达深度学习第一周课程学习笔记
  8. 天思 erp win7安装提示服务器上没有文件信息,关于天思ERP 9.2客户端无法安装的问题...
  9. 韩国瑜会见陆委会主委陈明通:别给高雄念紧箍咒
  10. 【Arduino】基于Arduino的循迹小车电路连接与程序编写