1.Qt实现QQ界面是通过QToolBox类来实现的,基本结构是:QToolBox里面装QGroupBox,然后QGroupBox里面装QToolButton,设置好相关属性即可

2.定义类继承QToolBox

  1. class Drawer : public QToolBox

3.在构造函数中完成布局,头文件代码展示,为了避免代码重复定义初始化函数

  1. initToolButton
  1. #ifndef DRAWER_H
  2. #define DRAWER_H
  3. #include <QWidget>
  4. #include <QToolBox>//工具盒类,层叠窗口,抽屉效果实现
  5. #include <QToolButton>
  6.  
  7. class Drawer : public QToolBox
  8. {
  9. Q_OBJECT
  10. public:
  11. Drawer(QWidget *parent=0,Qt::WindowFlags f = 0);
  12. ~Drawer();
  13. void initToolButton(QToolButton **tb,QString name,QString pathpic);
  14. private :
  15. QToolButton *toolbtn1;
  16. QToolButton *toolbtn2;
  17. QToolButton *toolbtn3;
  18. QToolButton *toolbtn4;
  19. QToolButton *toolbtn5;
  20. QToolButton *toolbtn11;
  21. QToolButton *toolbtn12;
  22. QToolButton *toolbtn21;
  23. QToolButton *toolbtn22;
  24. };
  25. #endif // DRAWER_H

4.主要代码为.cpp文件

  1. #include "drawer.h"
  2. #include<QGroupBox>
  3. #include <QVBoxLayout>
  4. #include <QDebug>
  5. Drawer::Drawer(QWidget *parent, Qt::WindowFlags f):QToolBox(parent,f)
  6. {
  7. setWindowTitle("QQ");
  8. initToolButton(&toolbtn1,"张远山","1.png");
  9. qDebug()<<"ok";
  10. initToolButton(&toolbtn2,"东奥","2.png");
  11. qDebug()<<"ok";
  12. initToolButton(&toolbtn3,"孙选成","3.png");
  13. qDebug()<<"ok";
  14. initToolButton(&toolbtn4,"司宽","4.png");
  15. qDebug()<<"ok";
  16. initToolButton(&toolbtn5,"张宇","5.png");
  17. qDebug()<<"ok";
  18. QGroupBox *gb1 = new QGroupBox;
  19. QVBoxLayout *lay1 = new QVBoxLayout(gb1);
  20. lay1->setMargin(10);
  21. lay1->setAlignment(Qt::AlignHCenter);
  22. lay1->addWidget(toolbtn1);
  23. lay1->addWidget(toolbtn2);
  24. lay1->addWidget(toolbtn3);
  25. lay1->addWidget(toolbtn4);
  26. lay1->addWidget(toolbtn5);
  27. // lay1->addStretch();
  28. initToolButton(&toolbtn11,"刘翔","11.png");
  29. initToolButton(&toolbtn12,"詹姆斯","12.png");
  30. QGroupBox *gb2 = new QGroupBox;
  31. QVBoxLayout *lay2 = new QVBoxLayout(gb2);
  32. lay2->addWidget(toolbtn11);
  33. lay2->addWidget(toolbtn12);
  34. lay2->setMargin(10);
  35. lay2->setAlignment(Qt::AlignHCenter);
  36. initToolButton(&toolbtn21,"惠子","21.png");
  37. initToolButton(&toolbtn22,"名人","22.png");
  38. QGroupBox *gb3 = new QGroupBox;
  39. QVBoxLayout *lay3 = new QVBoxLayout(gb3);
  40. lay3->addWidget(toolbtn21);
  41. lay3->addWidget(toolbtn22);
  42. lay3->setMargin(10);
  43. lay3->setAlignment(Qt::AlignHCenter);
  44. //准备好的抽屉插入TOOlBox中
  45. this->addItem(gb1,"我的好友");
  46. this->addItem(gb2,"陌生人");
  47. this->addItem(gb3,"黑名单");
  48. }
  49. Drawer::~Drawer()
  50. {
  51. }
  52. void Drawer::initToolButton(QToolButton **tb, QString name, QString pathpic)
  53. {
  54. (*tb) = new QToolButton;
  55. (*tb)->setText(name);
  56. (*tb)->setIcon(QPixmap(pathpic));
  57. (*tb)->setIconSize(QSize(20,20));
  58. (*tb)->setAutoRaise(true);
  59. (*tb)->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
  60. }

5.

(*tb)->setIcon(QPixmap(pathpic));表示设置按钮图标

6.

(*tb)->setAutoRaise(true);表示鼠标离开时按钮自动恢复为弹起状态

7.

(*tb)->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);表示设置按钮文字标签在图标旁边

8.查看运行效果图

 

QT实现类似QQ界面源码https://download.csdn.net/download/xipengbozai/16022547?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161787967916780271592065%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fdownload.%2522%257D&request_id=161787967916780271592065&biz_id=1&utm_medium=distribute.pc_search_result.none-task-download-2~download~first_rank_v2~rank_dl_default-1-16022547.pc_v2_rank_dl_default&utm_term=Qt%E5%AE%9E%E7%8E%B0QQ%E7%95%8C%E9%9D%A2

版权声明:本文为huipengbo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/huipengbo/p/8244802.html