Qt 侧边栏
来源:互联网 发布:网络会员管理系统免费 编辑:程序博客网 时间:2024/06/05 09:13
通过QToolButton来实现侧边栏,或者说侧边工具栏,可以通过接口直接自由添加按钮,可以设置工具按钮对应的QWidget,进而点击不同的按钮可以显示不同的QWidget。
实现代码:
- #ifndef QSIDEBAR_H
- #define QSIDEBAR_H
- #include <QtWidgets/QWidget>
- #include <QtWidgets/qtoolbutton.h>
- #include <QVBoxLayout>
- #include <qmap.h>
- #include <qbuttongroup.h>
- class QSideBar : public QWidget
- {
- Q_OBJECT
- public:
- QSideBar(QWidget *parent = 0);
- ~QSideBar();
- QToolButton* addTooButton(const QString &strName, const QString &strToolTip, const QIcon &icon);
- void setToolWidget(QToolButton *pToolBt, QWidget *pWidget);
- private:
- void showWidget();
- QWidget *m_barWidget;
- QVBoxLayout *m_barLayout;
- QVector<QToolButton*> m_toolBts;
- QHBoxLayout *m_parentLayout;
- QWidget *m_blankWidget;
- QMap<QToolButton *, QWidget *> m_toolWidget;
- QToolButton *m_currentToolBt;
- QButtonGroup m_buttonGroup;
- };
- #endif // QSIDEBAR_H
- #include "qsidebar.h"
- QSideBar::QSideBar(QWidget *parent)
- : QWidget(parent), m_currentToolBt(NULL)
- {
- m_parentLayout = new QHBoxLayout(this);
- m_parentLayout->setContentsMargins(0, 0, 0, 0);
- m_barWidget = new QWidget(this);
- m_barWidget->setFixedWidth(64);
- m_barLayout = new QVBoxLayout(m_barWidget);
- m_barLayout->setContentsMargins(0, 0, 0, 0);
- m_barLayout->setSpacing(0);
- m_blankWidget = new QWidget(this);
- //m_blankWidget->setVisible(false);
- m_parentLayout->addWidget(m_barWidget);
- m_parentLayout->addWidget(m_blankWidget);
- QSpacerItem *pItem = new QSpacerItem(10, 10, QSizePolicy::Preferred, QSizePolicy::Expanding);
- m_barLayout->addSpacerItem(pItem);
- }
- QSideBar::~QSideBar()
- {
- }
- QToolButton *QSideBar::addTooButton(const QString &strName, const QString &strToolTip, const QIcon &icon)
- {
- QToolButton *pToolBt = new QToolButton(m_barWidget);
- pToolBt->setText(strName);
- pToolBt->setToolTip(strToolTip);
- pToolBt->setIcon(icon);
- pToolBt->setIconSize(QSize(64, 64));
- pToolBt->setCheckable(true);
- connect(pToolBt, &QToolButton::clicked, this, &QSideBar::showWidget);
- m_buttonGroup.addButton(pToolBt);
- m_barLayout->insertWidget(m_barLayout->count() - 1, pToolBt);
- return pToolBt;
- }
- void QSideBar::setToolWidget(QToolButton *pToolBt, QWidget *pWidget)
- {
- m_toolWidget[pToolBt] = pWidget;
- if (pWidget)
- {
- m_parentLayout->addWidget(pWidget);
- pWidget->setVisible(false);
- }
- }
- void QSideBar::showWidget()
- {
- m_blankWidget->setVisible(false);
- auto it = m_toolWidget[m_currentToolBt];
- if (it)
- it->setVisible(false);
- QToolButton *pTool = qobject_cast<QToolButton*>(sender());
- if (pTool)
- {
- m_currentToolBt = pTool;
- auto it = m_toolWidget[pTool];
- if (it)
- it->setVisible(true);
- else
- m_blankWidget->setVisible(true);
- }
- }
测试代码:
- #pragma execution_character_set("utf-8")
- #include "qsidebar.h"
- #include <QtWidgets/QApplication>
- #include <QtWidgets\qlabel.h>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- QSideBar w;
- w.addTooButton("", "回退", QIcon(":/QSideBar/Resources/Toolbar_Undo_64px.ico"));
- w.addTooButton("", "前进", QIcon(":/QSideBar/Resources/Toolbar_Redo_64px.ico"));
- QLabel labelPlayList("列表");
- w.setToolWidget(w.addTooButton("", "列表", QIcon(":/QSideBar/Resources/Toolbar_Playlist_64px.ico")), &labelPlayList);
- QLabel labelCut("剪切");
- w.setToolWidget(w.addTooButton("", "剪切", QIcon(":/QSideBar/Resources/Toolbar_Cut_64px.ico")), &labelCut);
- QLabel labelSave("保存");
- w.setToolWidget(w.addTooButton("", "保存", QIcon(":/QSideBar/Resources/Toolbar_Save_64px.ico")), &labelSave);
- QLabel labelReset("重置");
- w.setToolWidget(w.addTooButton("", "重置", QIcon(":/QSideBar/Resources/Toolbar_Replay_64px.ico")), &labelReset);
- w.show();
- return a.exec();
- }
交流qq:1245178753
源码下载:http://download.csdn.net/detail/u011417605/9661478
本文地址:http://blog.csdn.net/u011417605/article/details/52901296
阅读全文
0 0
- Qt 侧边栏
- Qt 侧边栏
- 侧边栏
- 侧边栏
- 侧边栏
- 侧边栏-css+js侧边栏运动
- 显示&隐藏侧边栏
- jquery侧边栏效果
- Android侧边栏
- iOS侧边栏实现
- Android_侧边导航栏
- android侧边栏
- css3仿天猫侧边栏
- js 侧边栏
- 联系人侧边栏控件
- DrawerLayout 实现侧边栏
- 侧边固定导航栏
- android:滑动侧边栏
- spring事务管理
- MSDNet(Multi-Scale Dense Convolutional Networks)算法笔记
- 二叉树题目
- Python基础知识实例讲解
- Oxford Deep NLP学习笔记1:Word Level Semantics
- Qt 侧边栏
- 我的第一篇博客2017
- 水平集重叠细胞分割
- leetcode 347. Top K Frequent Elements
- Android 群发短信试列
- 头文件 <bits/stdc++.h>
- 【深入Java虚拟机】之四:类加载机制
- as中修改应用的包名
- 依旧摘自《数据结构--用C语言描述》的查找算法 哈希和折半