Qt 实现抽屉效果

时间:2025-03-27 07:07:15
#include "" #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/"))); toolButtons[i]->setText(QString::fromLocal8Bit("常用功能")); // 设置抽屉按钮的样式,抽屉默认折叠 pushButtons[i]->setIcon(QIcon(QPixmap(":/res/"))); // 设置抽屉默认折叠,一定记得在 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/"))); } else {// 当前抽屉是关闭的 // 打开抽屉 widgetBodys[index]->show(); // 按钮变为打开状态 pushButton->setIcon(QIcon(QPixmap(":/res/"))); } } }