qt有自带的抽屉控件,叫qtoolbox,但是我觉得比较难用,于是便自己写了一个,基本的收缩啊,添加窗体功能都有的。直接看核心代码吧
.h

#ifndef MYDRAWER_H
#define MYDRAWER_H#include <QWidget>
#include <QLabel>
#include <QScrollArea>
#include <QVBoxLayout>
#include <QFrame>class MyDrawer : public QFrame
{Q_OBJECT
public:explicit MyDrawer(QWidget *parent = nullptr);~MyDrawer();void AddWidget(QWidget *Wgt);void SetTitle(QString i_title);protected:void resizeEvent(QResizeEvent *event);void mousePressEvent(QMouseEvent *event);signals:private:QWidget *m_pCenterWgt=nullptr;QLabel *m_pTextLabel=nullptr;QLabel *m_pIconLabel=nullptr;QVBoxLayout *m_pCenterLayout=nullptr;QWidget *m_ptitleWgt=nullptr;QScrollArea *m_pArea=nullptr;bool m_ScaleBool=false;};#endif // MYDRAWER_H

.cpp

#include "mydrawer.h"
#include <QVBoxLayout>
#include <QResizeEvent>MyDrawer::MyDrawer(QWidget *parent) : QFrame(parent)
{this->setFrameStyle(QFrame::Panel | QFrame::Raised);m_pCenterWgt=new QWidget(this);m_pCenterLayout=new QVBoxLayout(this);m_pCenterLayout->setMargin(5);m_pCenterLayout->setSpacing(5);m_pCenterWgt->setLayout(m_pCenterLayout);m_pTextLabel=new QLabel(this);m_pIconLabel=new QLabel(this);m_pIconLabel->setFixedSize(20,20);QPixmap pixMap(":/img/right.png");m_pIconLabel->setPixmap(pixMap);m_pTextLabel->setFixedWidth(150);m_ptitleWgt=new QWidget(this);QHBoxLayout *titleLayout=new QHBoxLayout(this);titleLayout->addWidget(m_pIconLabel);titleLayout->addWidget(m_pTextLabel);titleLayout->setMargin(0);titleLayout->setSpacing(3);m_ptitleWgt->setLayout(titleLayout);m_ptitleWgt->setFixedHeight(30);m_pArea=new QScrollArea(this);m_pArea->setWidget(m_pCenterWgt);m_pArea->hide();QVBoxLayout *mainLayout=new QVBoxLayout(this);mainLayout->addWidget(m_ptitleWgt);mainLayout->addWidget(m_pArea);mainLayout->setMargin(0);mainLayout->setSpacing(0);this->setLayout(mainLayout);
}MyDrawer::~MyDrawer()
{}void MyDrawer::AddWidget(QWidget *Wgt)
{m_pCenterLayout->addWidget(Wgt);
}void MyDrawer::SetTitle(QString i_title)
{m_pTextLabel->setText(i_title);
}void MyDrawer::resizeEvent(QResizeEvent *event)
{m_pCenterWgt->resize(this->width(),this->height());
}void MyDrawer::mousePressEvent(QMouseEvent *event)
{if(event->button()==Qt::LeftButton){if(m_ptitleWgt->geometry().contains(this->mapFromGlobal(QCursor::pos()))){m_ScaleBool=!m_ScaleBool;if(m_ScaleBool){m_pArea->show();m_pIconLabel->setPixmap(QPixmap(":/img/down.png"));}else{m_pArea->hide();m_pIconLabel->setPixmap(QPixmap(":/img/right.png"));}}}
}

然后看下效果图:


有什么不懂的欢迎在评论区留言。。。。

qt实现抽屉效果,类似qq的好友功能相关推荐

  1. QT之灰色头像(类似QQ离线头像)

    QT之灰色头像(类似QQ离线头像) QT之灰色头像类似QQ离线头像 概要 效果图 上代码 下代码 结尾 概要 在讲正常图片转灰色图片之前,我们先来了解下灰度图.灰度图又称为灰阶图,任何颜色都由红.绿. ...

  2. mysql生成类似qq号_【mysql】类似QQ的好友关系表是怎么设计的?

    请问一下类似QQ的好友关系表是怎么设计的? 难道只是简单的id,userId,friendId吗? 回答 其实没有必要把事情想得太复杂了,按照需求慢慢递进就可以了. 这是我做关注功能的表结构,可以参考 ...

  3. 类似QQ的好友移动功能

    类似QQ的好友移动,左侧有一个列表,右侧有一个列表,可以左右移动,单击选择,双击移动,全部移动,过滤条件过滤左侧列表,点击提交后把右侧列表中的数据验证然后保存到数据库中.可以使用select但是sel ...

  4. Ubuntu(Debian)截图并编辑软件推荐:Flameshot(实现类似QQ的截图功能,具有插入文字功能)

    Ubuntu(Debian)截图并编辑软件推荐:Flameshot(实现类似QQ的截图功能) 一 具有文字插入功能的安装教程 1.1 卸载原有的flameshot 1.2 clone github 1 ...

  5. HADOOP实现查找QQ共同好友功能

    HADOOP实现查找QQ共同好友功能 需求: A:B,C,D,F,E,O B:A,C,E,K C:F,A,D,I D:A,E,F,L E:B,C,D,M,L F:A,B,C,D,E,O,M G:A,C ...

  6. Qt+html+JavaScript实现类似QQ聊天界面的气泡效果

    这是一个简单的类似QQ聊天界面的Demo,用Qt实现,在QWebView里嵌入网页的方式实现.先看效果图: 无论怎样,我觉得自己动手写出来的东西才是自己的,所以源码不全,重点的代码我会放上来.只是模拟 ...

  7. QT实现两界面类似QQ聊天

    题目要求: 在基于QT的界面基础上,两个窗口通过套接字实现网络通信,所用协议包括TCP和UDP协议,为了模拟不同的计算机,请大家建立两个虚拟机,一个虚拟机运行一个类似QQ的界面,两个界面实现类似QQ聊 ...

  8. 基于python实现类似qq群聊功能

    这篇文章主要记录了自己学习python时学习到的使用python来实现类似qq群聊的功能,整个项目分为服务器端和客户端两个部分,具体的实现如下: 一.具体代码 1.服务器端(Server.py) im ...

  9. 【cocos2dx 3.3 lua】04 纸牌翻转效果--类似QQ斗地主癞子效果

    周末在家玩QQ斗地主,发现里面的癞子翻牌效果挺不错,于是想着自己做一个玩玩,于是有了如下代码: -- 卡牌旋转动画-- 需要2张图,一张正面一张背面,否则会看到一张正面旋转了360度local car ...

  10. 类似QQ贴边掩藏功能的实现(三)

    大体功能基本实现了,但还需要结合我们产品的特性去考虑一些细节问题,并进行充分的测试.下面将列出在开发过程中遇到的一些主要的细节和问题. 1.WM_MOVING问题 在测试向左和向右的贴边掩藏时,发现一 ...

最新文章

  1. 芯片项目烂尾怎么办?国家发改委回应了!
  2. android7.0如何加载本地图片,Android 6.0和7.0 加载同一张图片,结果不同
  3. openstack运维实战系列(十)之nova指定compute节点和IP地址
  4. 将SVN的代码推送到码云的步骤
  5. [密码学] 公钥密码基础与RSA
  6. 云原生实战派:2021 让改变发生,2022 让创新升级
  7. Flex与.NET互操作系列文章
  8. python里的关键字有哪些_Python 中的关键字有哪些?
  9. RAML用户应遵循的C#与Web API代码生成模式
  10. linux启动mysql_Linux服务器安装Mysql教程
  11. Dijkstra Algorithm (迪杰斯特拉算法)
  12. 【二叉树迭代版中序遍历】LeetCode 94. Binary Tree Inorder Traversal
  13. java 打包运行环境_Jar 打包 EXE文件,可以脱离java环境运行 Jsmooth的使用
  14. SQL Server DATEPART() 函数
  15. [转载] LINUS:利用二级指针删除单向链表
  16. HTC vive开发
  17. android壁纸服务,android壁纸服务流程浅析
  18. SQL三个表关联查询
  19. dcgan_faces_tutorial.ipynb
  20. .csd文件怎么读?--CMU_MOSI_Opinion_Labels.csd

热门文章

  1. vuex实例方法replaceState解决vuex页面刷新数据丢失问题
  2. redis循环键_javascript – for循环从redis延迟获取项目
  3. HashSet、TreeSet、LinkedHashSet的区别
  4. 计算机里的e盘 不能应用,我的电脑里的e盘打不开是怎么回事
  5. 部署到gcp_Linux基础架构学习 - 使用GCP托管云解决方案 - Day09
  6. python selenium 弹出框定位_selenium弹框元素定位-冻结界面
  7. kafka与mysql持久化_漫游Kafka设计篇之数据持久化
  8. 怎么设置php 中图片的大小写,php中强制字母转换大小写的方法有哪些
  9. 安卓和php开发融云聊天室,聊天室
  10. MySQL(21)-----数据库事务