Qt 实现抽屉效果

avatar
作者
筋斗云
阅读量: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")));         }     } } 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!