当前位置:   article > 正文

Qt 侧边栏_qsidebar

qsidebar

                      欢迎关注公众号可以查看更多完整文章

通过QToolButton来实现侧边栏,或者说侧边工具栏,可以通过接口直接自由添加按钮,可以设置工具按钮对应的QWidget,进而点击不同的按钮可以显示不同的QWidget。

实现代码:

  1. #ifndef QSIDEBAR_H
  2. #define QSIDEBAR_H
  3. #include <QtWidgets/QWidget>
  4. #include <QtWidgets/qtoolbutton.h>
  5. #include <QVBoxLayout>
  6. #include <qmap.h>
  7. #include <qbuttongroup.h>
  8. class QSideBar : public QWidget
  9. {
  10. Q_OBJECT
  11. public:
  12. QSideBar(QWidget *parent = 0);
  13. ~QSideBar();
  14. QToolButton* addTooButton(const QString &strName, const QString &strToolTip, const QIcon &icon);
  15. void setToolWidget(QToolButton *pToolBt, QWidget *pWidget);
  16. private:
  17. void showWidget();
  18. QWidget *m_barWidget;
  19. QVBoxLayout *m_barLayout;
  20. QVector<QToolButton*> m_toolBts;
  21. QHBoxLayout *m_parentLayout;
  22. QWidget *m_blankWidget;
  23. QMap<QToolButton *, QWidget *> m_toolWidget;
  24. QToolButton *m_currentToolBt;
  25. QButtonGroup m_buttonGroup;
  26. };
  27. #endif // QSIDEBAR_H
  1. #include "qsidebar.h"
  2. QSideBar::QSideBar(QWidget *parent)
  3. : QWidget(parent), m_currentToolBt(NULL)
  4. {
  5. m_parentLayout = new QHBoxLayout(this);
  6. m_parentLayout->setContentsMargins(0, 0, 0, 0);
  7. m_barWidget = new QWidget(this);
  8. m_barWidget->setFixedWidth(64);
  9. m_barLayout = new QVBoxLayout(m_barWidget);
  10. m_barLayout->setContentsMargins(0, 0, 0, 0);
  11. m_barLayout->setSpacing(0);
  12. m_blankWidget = new QWidget(this);
  13. //m_blankWidget->setVisible(false);
  14. m_parentLayout->addWidget(m_barWidget);
  15. m_parentLayout->addWidget(m_blankWidget);
  16. QSpacerItem *pItem = new QSpacerItem(10, 10, QSizePolicy::Preferred, QSizePolicy::Expanding);
  17. m_barLayout->addSpacerItem(pItem);
  18. }
  19. QSideBar::~QSideBar()
  20. {
  21. }
  22. QToolButton *QSideBar::addTooButton(const QString &strName, const QString &strToolTip, const QIcon &icon)
  23. {
  24. QToolButton *pToolBt = new QToolButton(m_barWidget);
  25. pToolBt->setText(strName);
  26. pToolBt->setToolTip(strToolTip);
  27. pToolBt->setIcon(icon);
  28. pToolBt->setIconSize(QSize(64, 64));
  29. pToolBt->setCheckable(true);
  30. connect(pToolBt, &QToolButton::clicked, this, &QSideBar::showWidget);
  31. m_buttonGroup.addButton(pToolBt);
  32. m_barLayout->insertWidget(m_barLayout->count() - 1, pToolBt);
  33. return pToolBt;
  34. }
  35. void QSideBar::setToolWidget(QToolButton *pToolBt, QWidget *pWidget)
  36. {
  37. m_toolWidget[pToolBt] = pWidget;
  38. if (pWidget)
  39. {
  40. m_parentLayout->addWidget(pWidget);
  41. pWidget->setVisible(false);
  42. }
  43. }
  44. void QSideBar::showWidget()
  45. {
  46. m_blankWidget->setVisible(false);
  47. auto it = m_toolWidget[m_currentToolBt];
  48. if (it)
  49. it->setVisible(false);
  50. QToolButton *pTool = qobject_cast<QToolButton*>(sender());
  51. if (pTool)
  52. {
  53. m_currentToolBt = pTool;
  54. auto it = m_toolWidget[pTool];
  55. if (it)
  56. it->setVisible(true);
  57. else
  58. m_blankWidget->setVisible(true);
  59. }
  60. }


测试代码:

  1. #pragma execution_character_set("utf-8")
  2. #include "qsidebar.h"
  3. #include <QtWidgets/QApplication>
  4. #include <QtWidgets\qlabel.h>
  5. int main(int argc, char *argv[])
  6. {
  7. QApplication a(argc, argv);
  8. QSideBar w;
  9. w.addTooButton("", "回退", QIcon(":/QSideBar/Resources/Toolbar_Undo_64px.ico"));
  10. w.addTooButton("", "前进", QIcon(":/QSideBar/Resources/Toolbar_Redo_64px.ico"));
  11. QLabel labelPlayList("列表");
  12. w.setToolWidget(w.addTooButton("", "列表", QIcon(":/QSideBar/Resources/Toolbar_Playlist_64px.ico")), &labelPlayList);
  13. QLabel labelCut("剪切");
  14. w.setToolWidget(w.addTooButton("", "剪切", QIcon(":/QSideBar/Resources/Toolbar_Cut_64px.ico")), &labelCut);
  15. QLabel labelSave("保存");
  16. w.setToolWidget(w.addTooButton("", "保存", QIcon(":/QSideBar/Resources/Toolbar_Save_64px.ico")), &labelSave);
  17. QLabel labelReset("重置");
  18. w.setToolWidget(w.addTooButton("", "重置", QIcon(":/QSideBar/Resources/Toolbar_Replay_64px.ico")), &labelReset);
  19. w.show();
  20. return a.exec();
  21. }

交流qq:1245178753

源码下载:QSideBarQt侧边栏.zip_qt侧边栏,qtsidebar-C++代码类资源-CSDN下载

本文地址:Qt 侧边栏_GreenArrowMan-CSDN博客-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/962393
推荐阅读
相关标签
  

闽ICP备14008679号