简述

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()添加所有的分组。这样,我们就可以和他们聊天啦^_^。

Qt实现 QQ好友列表QToolBox的更多相关文章

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

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/shuideyidi/article/details/30619167     前段时间在忙毕业设计, ...

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

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

  3. [iOS基础控件 - 6.9.3] QQ好友列表Demo TableView

    A.需求 1.使用plist数据,展示类似QQ好友列表的分组.组内成员显示缩进功能 2.组名使用Header,展示箭头图标.组名.组内人数和上线人数 3.点击组名,伸展.缩回好友组   code so ...

  4. 仿QQ好友列表界面的实现

    TableView有2种style:UITableViewStylePlain 和 UITableViewStyleGrouped. 但是QQ好友列表的tableView给人的感觉似乎是2个style ...

  5. ExpandableListView仿QQ好友列表

    本例中,对ExpandableListView中的数据进行了封装,分为两个JavaBean,一个为Group类表示组信息,一个Child类表示该组下子列表信息: Group: public class ...

  6. (二十七)QQ好友列表的实现

    QQ好友列表通过plist读取,plist的结构为一组字典,每个字典内有本组的信息和另外一组字典代表好友. 要读取plist,选择合适的数据结构,例如NSArray,然后调用initWithConte ...

  7. android 实现QQ好友列表

    在某些Android开发群里,看到有些新手问怎么实现QQ好友列表,其实网上一搜挺多的.接触Android,也才一年的时间,大部分时间花在工作上(解bug...),界面上开发很少参与.自己维护的系统应用 ...

  8. swift 实现QQ好友列表功能

    最近项目中有类似QQ好友列表功能,整理了一下,话不多说,直接上代码 import UIKit class QQFriend: NSObject { var name: String? var intr ...

  9. Windows UIA自动化测试框架学习--获取qq好友列表

    前段时间应公司要求开发一款针对现有WPF程序的自动化测试工具,在网上查资料找了一段时间,发现用来做自动化测试的框架还是比较多的,比如python的两个模块pywinauto和uiautomation, ...

随机推荐

  1. GTID与MHA

    MHA 基于binlog文件位置的复制 * Phase 3: Master Recovery Phase.. * Phase 3.1: Getting Latest Slaves Phase.. La ...

  2. CentOS6.4挂载读写NTFS分区 (重要)

    如今很多的linux衍生版本已经支持自动连接NTFS分区了,之前在一次安装的过程中,遇到 linux不能识别NTFS分区,解决方法如下文: ============================== ...

  3. Dumb Bones UVA - 10529[多米诺重构]

    Dumb Bones UVA - 10529   来自绿书p176  题意 你试图把一些多米诺骨牌排成直线,然后推倒它们.但是如果你在放骨牌的时候不小心把刚放的骨牌碰倒了,它就会把相临的一串骨牌全都碰 ...

  4. 【咸鱼教程】protobuf在websocket通讯中的使用

    教程目录一 protobuf简介二 使用protobuf三 Demo下载 参考: CSDN:Egret项目中使用protobuf(protobufjs) TS项目中使用Protobuf的解决方案(ba ...

  5. linux下模拟CPU占用100%小程序

    在做一个测试时,需要模拟服务器CPU占用满的情况,在查阅相关资料后,发现网上程序不太好用, 原文在这:http://www.2cto.com/os/201304/202068.html 优化后如下: ...

  6. python selenium操作表格式元素实例

    很多时候,网页上的布局都是表格形式的,如出下面这样的 这种网页类型在自动化中比较头痛,需要很多判断,下面就举个例子,这里以深圳出入境网页为例,http://yysl.sz3e.com/wsyysq/s ...

  7. react实现全选、取消全选和个别选择

    react里面实现全选和取消全选,个别选择等操作,效果如下 代码: import React, {Component} from 'react' export default class Demo e ...

  8. Saltstack实战之无master和多master

    如果不想依赖master可以设置为无master vim /etc/salt/minion 就可以通过minion来安装一个salt-master了(下来查资料做,关闭salt-minion进程因为不 ...

  9. 关于Python的集合set

    网上那么多说创建集合的语句是: >>>a=set([1,2,3]) python 3.6.3,你们真的能运行吗? 我这里报: Traceback (most recent call ...

  10. oracle11gR2 win7_32位客户端连接虚拟机中oracle11gR2 win7_32位服务器方法

    改写服务器中的监听文件(listener.ora和tnsnames.ora) “ora-12541:TNS:无监听程序”问题的解决 ora-12541:TNS:无监听程序,出现这种错误的时候,可以尝试 ...