Qt 实现抽屉效果
创始人
2024-11-12 07:09:13

1、实现效果和UI设计界面
在这里插入图片描述
在这里插入图片描述
2、工程目录
在这里插入图片描述
3、mainwindow.h

#ifndef MAINWINDOW_H #define MAINWINDOW_H  #include  #include  #include  #include  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 widgetBodys;          // 要用到的 toolButton     vector toolButtons;          // 折叠按钮 pushButton     vector 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(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")));         }     } } 

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...