#include #include #include #include #include #include #include #include class toolItemWidget :public QWidget { public: QHBoxLayout* layout = new QHBoxLayout(this); fancyButton* returnBtn; fancyButton* homeBtn; QLabel* dirLabel = new QLabel(); toolItemWidget(QString title) { QFont font("微软雅黑", 24, QFont::Bold); QPalette palette; palette.setColor(QPalette::WindowText, Qt::white); returnBtn = new fancyButton(40,40, QIcon(":/topBar/icon/rollback.png"),"返回上一级"); layout->addWidget(returnBtn); homeBtn = new fancyButton(40, 40, QIcon(":/topBar/icon/home2.png"), "返回目录"); layout->addWidget(homeBtn); dirLabel->setText(title); dirLabel->setFont(font); dirLabel->setStyleSheet("QLabel { color: white; }"); layout->addWidget(dirLabel); layout->setAlignment(Qt::AlignLeft); layout->setContentsMargins(0, 0, 0, 0); } }; class menuListWidget : public QListWidget { Q_OBJECT public: QString basePath = QString::fromStdString(_core._appConfig.imgSavePath); menuListWidget() { _toolItemWidget = new toolItemWidget(basePath); pathList.append(basePath); refreshListWidget(); targetDepth = pathList.size(); depth = targetDepth; _toolItemWidget->returnBtn->setDisabled(true); _toolItemWidget->homeBtn->setDisabled(true); QObject::connect(this, &QListWidget::itemClicked, this, &menuListWidget::itemClick); //jumpWithPath("D://////CCD/yuantu/2024-06-04/23H/TEST"); } void addTools(QString title) { QListWidgetItem* item = new QListWidgetItem(); this->addItem(item); if (_toolItemWidget != nullptr) delete _toolItemWidget; _toolItemWidget = new toolItemWidget(title); item->setSizeHint(_toolItemWidget->sizeHint()); QObject::connect(_toolItemWidget->returnBtn, &QPushButton::clicked, this, &menuListWidget::returnLast); QObject::connect(_toolItemWidget->homeBtn, &QPushButton::clicked, this, &menuListWidget::toMenu); this->setItemWidget(item, _toolItemWidget); } void returnLast() { if (depth <= targetDepth) return; depth--; pathList.removeLast(); refreshListWidget(); if (depth <= targetDepth) { _toolItemWidget->returnBtn->setDisabled(true); _toolItemWidget->homeBtn->setDisabled(true); } } void refreshListWidget() { this->clear(); addTools(pathList.last()); QString path; for (auto p : pathList) path.append(p + "/"); QFont font("微软雅黑", 18, QFont::Bold); std::vector result = fileManager::getAllDirs(path); for (auto dirName : result) { QListWidgetItem* item = new QListWidgetItem(QString::fromStdString(dirName)); item->setFont(font); item->setForeground(QBrush(QColor(Qt::white))); this->addItem(item); } emit switchPathSignal(path); } void toMenu() { jumpWithPath(basePath+"\\"); } void jumpWithPath(QString path) { //分割字符串 path = fileManager::normalizePathSeparators(path); QStringList list = path.split("/"); if (list.size() == 0) list = path.split("\\"); if (list.size() == 0) return; //写入 //std::string fileName = fileManager::getFileName(path.toStdString()); pathList.clear(); for (auto str : list) //if (str.contains(QString::fromStdString(fileName)) == false) pathList.append(str); depth = pathList.size() - 1; refreshListWidget(); } private: toolItemWidget* _toolItemWidget = nullptr; int depth = 0,targetDepth = 0; QLinkedList pathList; private slots: void itemClick(QListWidgetItem* item) { if (item->text().isEmpty()) return; pathList.append(item->text()); depth++; refreshListWidget(); } signals: void switchPathSignal(QString path); }; #pragma once