简述

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_OBJECT //只有加入了Q_OBJECT,你才能使用QT中的signal和slot机制 public: ToolBox(QWidget *parent = 0) : QToolBox(parent) { initUI(); //初始化UI // 连接信号槽 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()添加所有的分组。这样,我们就可以和他们聊天啦^_^。

转载于:https://www.cnblogs.com/invisible2/p/6843135.html

Qt实现 QQ好友列表QToolBox相关推荐

  1. android制作好友列表,Qt制作QQ好友列表

    郁闷了好长时间,QQ列表怎么做呢,前一篇文章说想重写QTreeView,还要写个库,有点说大话了.其实一开始我就被骗了.因为当我看QQ列表的第一印象是用List,第2印象是用TreeView,第三我就 ...

  2. C++ Qt5学习笔记 2020-12-10(qlabel对齐方式,dateEdit显示日历,设置滚动条及其一些属性,qss中使用参数,QToolBox的使用,及以此实现简易的QQ好友列表)

    1.qlabel对齐方式: ui->label->setWordWrap(true); //自动换行ui->label->setAlignment(Qt::AlignTop); ...

  3. 基于Qt的类似QQ好友列表抽屉效果的实现

    转载地址: http://blog.csdn.net/shuideyidi/article/details/30619167 前段时间在忙毕业设计,所以一直没有更新博客.今天答辩完以后,将对我的毕业设 ...

  4. QQ好友列表的实现(QQ9.0版本样式) -- 使用QTreeView

    文章结构 最终实现效果 基本功能 代码主要结构 FriendTree类主要工作解析 ItemDelegate类主要工作解析 工程源码路径/下载地址 最终实现效果 以上是实现的最终样式,自己电脑上安装的 ...

  5. iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)

    iOS开发UI篇-使用UItableview完成一个简单的QQ好友列表(一) 一.项目结构和plist文件 二.实现代码 1.说明: 主控制器直接继承UITableViewController // ...

  6. iOS之仿QQ好友列表展开收缩效果的实现

    使用UICollectionView实现 思路 很明显整体它是一个列表,它的分组是一个列表,它里面的好友列表也是一个列表,所以就可以使用组头来设置分组列表,使用cell设置好友列表: 当点击组头的时候 ...

  7. tableView练习 -- QQ好友列表

    LWTViewController.h // // LWTViewController.h // tableView练习 -- QQ好友列表 // // Created by apple on 14- ...

  8. html仿qq最小化怎么实现,JS仿QQ好友列表展开、收缩功能(第一篇)

    JS仿QQ好友列表展开.收缩功能(第一篇) 发布时间:2020-10-17 14:20:03 来源:脚本之家 阅读:96 作者:erdouzhang 效果图如下所示: html: 我的好友 张三 李四 ...

  9. Android开发学习之QQ好友列表的实现

    今天想和大家分享的是QQ好友列表的实现,我们知道,在默认情况下,QQ好友列表是处于收缩状态的,此时,列表显示好友分组名称.当我们单击分组时,列表处于展开状态,列表显示该分组下的项目.当再次单击分组时, ...

  10. python获取qq好友ip_使用Python模拟登录QQ邮箱获取QQ好友列表

    最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...

最新文章

  1. 触类旁通,经典面试题最长公共子序列应该这么答
  2. 计算机硬件基础大纲,计算机硬件技术基础大纲_.doc
  3. 一分钟明确 VS manifest 原理
  4. 计算机做镜像步骤,如何将当前的操作系统做成镜像?
  5. 多旋翼飞行器控制的难点
  6. 详情和 PoC 发布后,谷歌匆忙修复严重的 Gmail 漏洞
  7. iPhone6plus 的 iOS 11 GM和正式版安装包的 md5一模一样
  8. 消息队列中间件的技术选型分析
  9. STM32应用(三)一阶卡尔曼滤波原理和ADC读取红外测距模块的数值
  10. word中二级标题随一级标题自动编号
  11. travis不生效,No builds for this repository
  12. 动画3D变形:平移、旋转、缩放
  13. html左侧导航菜单多级,css3多级菜单导航栏、侧边菜单栏
  14. 单片机霹雳灯双灯c语言,HOLTEK单片机-8LED霹雳灯
  15. 手写一个微前端框架(内含源码地址)
  16. win7系统wifi没有网络连接到服务器,Win7无线Wifi无法连接怎么办?win7系统Wifi无法连接的三种故障原因及解决方法...
  17. 华为手机连电脑当摄像头用_今天才知道,华为手机摄像头还能这样用!还不会用你买什么华为?...
  18. 互联网大会8月13日召开 苏宁华为首次加盟
  19. 宝马汽车与中国马文化系列展示
  20. 五大常用算法之四:分治法

热门文章

  1. JavaScript笔记
  2. 天气预报城市代码对应表
  3. python wget_python wget下载文件处理的一些问题
  4. 某高校校园网的规划与设计(课程设计)
  5. 数论入门 2021-2-28
  6. 计算机操作系统|汤小丹|第四版|习题答案(一)
  7. 有效解决0x0000011b共享打印机无法连接(适用所有win系统)
  8. DWM1000的UWB测距改官网例程的调试
  9. MediaExtractor、MediaMuxer 分离和合成 mp4
  10. 到底什么是有限单元法?