阅读量:0
1、实现效果和UI设计界面
2、工程目录
3、mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QToolButton> #include <QPushButton> #include <vector> using namespace std; QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: Ui::MainWindow *ui; /** * @brief 初始化 UI */ void initUI(); // 要折叠的内容 vector<QWidget*> widgetBodys; // 要用到的 toolButton vector<QToolButton*> toolButtons; // 折叠按钮 pushButton vector<QPushButton*> pushButtons; private slots: // 点击打开和关闭抽屉按钮 void on_btns_clicked(); }; #endif // MAINWINDOW_H
4、mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); // 初始化 UI initUI(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::initUI() { // 要折叠的内容 widgetBodys.push_back(ui->widgetOneBody); widgetBodys.push_back(ui->widgetTwoBody); widgetBodys.push_back(ui->widgetThreeBody); // 要用到的 toolButton toolButtons.push_back(ui->toolButtonOne); toolButtons.push_back(ui->toolButtonTwo); toolButtons.push_back(ui->toolButtonThree); // 折叠按钮 pushButton pushButtons.push_back(ui->pushButtonOne); pushButtons.push_back(ui->pushButtonTwo); pushButtons.push_back(ui->pushButtonThree); for(size_t i = 0;i < widgetBodys.size();++i) { // 设置 ToolButton 的样式 toolButtons[i]->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); toolButtons[i]->setIcon(QIcon(QPixmap(":/res/functions.png"))); toolButtons[i]->setText(QString::fromLocal8Bit("常用功能")); // 设置抽屉按钮的样式,抽屉默认折叠 pushButtons[i]->setIcon(QIcon(QPixmap(":/res/close.png"))); // 设置抽屉默认折叠,一定记得在 UI 设计界面将 layoutTopMargin 和 layoutBottomMargin 设置为0 widgetBodys[i]->hide(); // 方便后面点击按钮时获取点击的哪个按钮 pushButtons[i]->setProperty("index",i); connect(pushButtons[i],&QPushButton::clicked,this,&MainWindow::on_btns_clicked); } } void MainWindow::on_btns_clicked() { // 获取点击的按钮 QPushButton *pushButton = qobject_cast<QPushButton*>(sender()); if(pushButton) { int index = pushButton->property("index").toInt(); if(widgetBodys[index]->isVisible()) {// 当前抽屉是展开的 // 关闭抽屉 widgetBodys[index]->hide(); // 按钮变为关闭状态 pushButton->setIcon(QIcon(QPixmap(":/res/close.png"))); } else {// 当前抽屉是关闭的 // 打开抽屉 widgetBodys[index]->show(); // 按钮变为打开状态 pushButton->setIcon(QIcon(QPixmap(":/res/open.png"))); } } }