Qt5基于QToolBox实现类似QQ抽屉效果

Qt5基于QToolBox实现类似QQ抽屉效果

QToolBox提供了一种列状的层叠窗口。QToolButton提供一种快速访问命令和选择项的按钮。通常在工具条中使用。抽屉效果是软件设计中的一种常见的形式。可以以一种动态直观的方式在大小有限的界面上扩展出更多的功能。在本Demo中定义了一个类,这个继承自QToolBox。设计Qt中主要的类有QToolButton QVBoxLayout。
具体的代码如下:
头文件代码:

#ifndef DRAWER_H
#define DRAWER_H

#include <QWidget>
#include <QToolBox>
#include <QToolButton>
class Drawer : public QToolBox
{
    Q_OBJECT
public:
    explicit Drawer(QWidget *parent = nullptr,Qt::WindowFlags f = 0);
private:
    QToolButton* toolBtn1_1;
    QToolButton* toolBtn1_2;
    QToolButton* toolBtn1_3;
    QToolButton* toolBtn1_4;
    QToolButton* toolBtn1_5;
    QToolButton* toolBtn2_1;
    QToolButton* toolBtn2_2;
    QToolButton* toolBtn3_1;
    QToolButton* toolBtn3_2;
};

#endif // DRAWER_H

源文件代码

#include "drawer.h"
#include <QGroupBox>
#include <QVBoxLayout>
Drawer::Drawer(QWidget *parent,Qt::WindowFlags f ) : QToolBox(parent,f)
{
    setWindowTitle(tr("我的QQ界面"));

    toolBtn1_1= new QToolButton(this);
    toolBtn1_1->setText(tr("张三"));
    toolBtn1_1->setIcon(QPixmap(":/new/prefix1/qq/1.bmp"));
    toolBtn1_1->setIconSize(QPixmap(":/new/prefix1/qq/1.bmp").size());
    toolBtn1_1->setAutoRaise(true);
    toolBtn1_1->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    toolBtn1_2= new QToolButton(this);
    toolBtn1_2->setText(tr("李四"));
    toolBtn1_2->setIcon(QPixmap(":/new/prefix1/qq/2.bmp"));
    toolBtn1_2->setIconSize(QPixmap(":/new/prefix1/qq/2.bmp").size());
    toolBtn1_2->setAutoRaise(true);
    toolBtn1_2->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    toolBtn1_3= new QToolButton(this);
    toolBtn1_3->setText(tr("小闫"));
    toolBtn1_3->setIcon(QPixmap(":/new/prefix1/qq/3.bmp"));
    toolBtn1_3->setIconSize(QPixmap(":/new/prefix1/qq/3.bmp").size());
    toolBtn1_3->setAutoRaise(true);
    toolBtn1_3->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    toolBtn1_4= new QToolButton(this);
    toolBtn1_4->setText(tr("王五"));
    toolBtn1_4->setIcon(QPixmap(":/new/prefix1/qq/4.bmp"));
    toolBtn1_4->setIconSize(QPixmap(":/new/prefix1/qq/4.bmp").size());
    toolBtn1_4->setAutoRaise(true);
    toolBtn1_4->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    toolBtn1_5= new QToolButton(this);
    toolBtn1_5->setText(tr("小孙"));
    toolBtn1_5->setIcon(QPixmap(":/new/prefix1/qq/5.bmp"));
    toolBtn1_5->setIconSize(QPixmap(":/new/prefix1/qq/5.bmp").size());
    toolBtn1_5->setAutoRaise(true);
    toolBtn1_5->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    QGroupBox* group1 = new QGroupBox;
    QVBoxLayout* layout1 = new QVBoxLayout(group1);
    layout1->setMargin(10);
    layout1->setAlignment(Qt::AlignHCenter);
    layout1->addWidget(toolBtn1_1);
    layout1->addWidget(toolBtn1_2);
    layout1->addWidget(toolBtn1_3);
    layout1->addWidget(toolBtn1_4);
    layout1->addWidget(toolBtn1_5);

    toolBtn2_1= new QToolButton(this);
    toolBtn2_1->setText(tr("小王"));
    toolBtn2_1->setIcon(QPixmap(":/new/prefix1/qq/6.bmp"));
    toolBtn2_1->setIconSize(QPixmap(":/new/prefix1/qq/6.bmp").size());
    toolBtn2_1->setAutoRaise(true);
    toolBtn2_1->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    toolBtn2_2= new QToolButton(this);
    toolBtn2_2->setText(tr("小郑"));
    toolBtn2_2->setIcon(QPixmap(":/new/prefix1/qq/7.bmp"));
    toolBtn2_2->setIconSize(QPixmap(":/new/prefix1/qq/7.bmp").size());
    toolBtn2_2->setAutoRaise(true);
    toolBtn2_2->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    QGroupBox* group2 = new QGroupBox;
    QVBoxLayout* layout2 = new QVBoxLayout(group2);
    layout2->addWidget(toolBtn2_1);
    layout2->addWidget(toolBtn2_2);

    toolBtn3_1= new QToolButton(this);
    toolBtn3_1->setText(tr("小张"));
    toolBtn3_1->setIcon(QPixmap(":/new/prefix1/qq/8.bmp"));
    toolBtn3_1->setIconSize(QPixmap(":/new/prefix1/qq/8.bmp").size());
    toolBtn3_1->setAutoRaise(true);
    toolBtn3_1->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    toolBtn3_2= new QToolButton(this);
    toolBtn3_2->setText(tr("小李"));
    toolBtn3_2->setIcon(QPixmap(":/new/prefix1/qq/9.bmp"));
    toolBtn3_2->setIconSize(QPixmap(":/new/prefix1/qq/9.bmp").size());
    toolBtn3_2->setAutoRaise(true);
    toolBtn3_2->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    QGroupBox* group3 = new QGroupBox;
    QVBoxLayout* layout3 = new QVBoxLayout(group3);
    layout3->addWidget(toolBtn3_1);
    layout3->addWidget(toolBtn3_2);

    //将准备好的抽屉插入到ToolBox
    this->addItem((QWidget*)group1,tr("我的好友"));
    this->addItem((QWidget*)group2,tr("陌生人"));
    this->addItem((QWidget*)group3,tr("黑名单"));
}

QToolButton共分为三个组。每个组中都使用了垂直布局。

QVBoxLayout* layout3 = new QVBoxLayout(group3);
layout3->addWidget(toolBtn3_1);
layout3->addWidget(toolBtn3_2);

然后将QToolButton添加到布局中。最后要使用int QToolBox::addItem(QWidget *w, const QString &text)函数将每个组都添加到QToolBox中。

 this->addItem((QWidget*)group1,tr("我的好友"));
 this->addItem((QWidget*)group2,tr("陌生人"));
 this->addItem((QWidget*)group3,tr("黑名单"))

运行效果:
在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值