From 7c4b76d844ad60ac4ac9b23ef9b965ac6580d109 Mon Sep 17 00:00:00 2001 From: taynpg Date: Tue, 11 Nov 2025 22:30:45 +0800 Subject: [PATCH] =?UTF-8?q?search=EF=BC=9A=E5=AF=B9=E7=85=A7=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=90=9C=E7=B4=A2=E7=AD=9B=E9=80=89=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 10 +++-- CMakeLists.txt | 2 +- Gui/Control/CompareControl.cpp | 77 ++++++++++++++++++++++++++++++++-- Gui/Control/CompareControl.h | 13 ++++++ Gui/Control/CompareControl.ui | 4 +- Gui/Control/cpTableWidget.cpp | 12 ++++++ Gui/Control/cpTableWidget.h | 6 +++ Gui/GuiUtil/Public.cpp | 2 +- Note/version.md | 4 ++ 9 files changed, 119 insertions(+), 11 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index f2492f4..638b5ff 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -16,14 +16,14 @@ "args": [] }, "cmake.configureSettings": { - //"CMAKE_PREFIX_PATH": "C:/Qt/6.8.3/mingw_64", - "CMAKE_PREFIX_PATH": "C:/Qt/Qt5.7.1/5.7/mingw53_32", + "CMAKE_PREFIX_PATH": "C:/Qt/6.8.3/mingw_64", + //"CMAKE_PREFIX_PATH": "C:/Qt/Qt5.7.1/5.7/mingw53_32", //"CMAKE_TOOLCHAIN_FILE": "${env:TT_VCPKG}" }, "cmake.configureArgs": [ "-Wno-dev", "-DCOMPILE_GUI=ON", - "-DQT_DEFAULT_MAJOR_VERSION=5" + "-DQT_DEFAULT_MAJOR_VERSION=6" ], "cmake.options.statusBarVisibility": "visible", "cmake.generator": "Ninja", @@ -147,7 +147,9 @@ "qpushbutton": "cpp", "qpainter": "cpp", "qdialog": "cpp", - "quuid": "cpp" + "quuid": "cpp", + "complex": "cpp", + "expected": "cpp" }, "editor.tokenColorCustomizations": { "textMateRules": [ diff --git a/CMakeLists.txt b/CMakeLists.txt index 491d310..fbf9a1c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.16) -project(frelay VERSION 0.2.3 LANGUAGES CXX) +project(frelay VERSION 0.2.4 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/Gui/Control/CompareControl.cpp b/Gui/Control/CompareControl.cpp index b46397e..5a6684e 100644 --- a/Gui/Control/CompareControl.cpp +++ b/Gui/Control/CompareControl.cpp @@ -82,6 +82,8 @@ void Compare::InitControl() connect(ui->btnLoad, &QPushButton::clicked, this, &Compare::Load); connect(ui->btnLeft, &QPushButton::clicked, this, &Compare::TransToLeft); connect(ui->btnRight, &QPushButton::clicked, this, &Compare::TransToRight); + connect(ui->btnSearch, &QPushButton::clicked, this, &Compare::Search); + connect(ui->btnReset, &QPushButton::clicked, this, &Compare::Reset); // 测试代码 connect(ui->btnReplace, &QPushButton::clicked, this, [this]() { @@ -130,6 +132,11 @@ void Compare::Save() return; } + if (!isResource_) { + QMessageBox::information(this, tr("提示"), tr("请先重置搜索结果后操作。")); + return; + } + QFile file("CompareData.xml"); if (!file.open(QIODevice::ReadWrite | QIODevice::Text)) { FTCommon::msg(this, tr("打开数据文件失败。")); @@ -165,13 +172,26 @@ void Compare::Save() } QStringList paths; + items_.clear(); + for (int row = 0; row < ui->tableWidget->rowCount(); ++row) { QTableWidgetItem* fileName = ui->tableWidget->item(row, 0); QTableWidgetItem* localItem = ui->tableWidget->item(row, 1); QTableWidgetItem* remoteItem = ui->tableWidget->item(row, 2); - paths << (fileName ? fileName->text() : ""); - paths << (localItem ? localItem->text() : ""); - paths << (remoteItem ? remoteItem->text() : ""); + + auto baseName = (fileName ? fileName->text() : ""); + auto localDir = (localItem ? localItem->text() : ""); + auto remoteDir = (remoteItem ? remoteItem->text() : ""); + + CompareItem item; + item.baseName = baseName; + item.localDir = localDir; + item.remoteDir = remoteDir; + items_.push_back(item); + + paths << baseName; + paths << localDir; + paths << remoteDir; } dataMap[titleKey] = paths; @@ -221,6 +241,9 @@ void Compare::Load() return; } + items_.clear(); + isResource_ = true; + ui->tableWidget->setIsResource(isResource_); QXmlStreamReader reader(&file); bool found = false; @@ -247,6 +270,12 @@ void Compare::Load() int row = ui->tableWidget->rowCount(); ui->tableWidget->insertRow(row); + CompareItem item; + item.baseName = paths[i]; + item.localDir = paths[i + 1]; + item.remoteDir = paths[i + 2]; + items_.push_back(item); + QTableWidgetItem* fileName = new QTableWidgetItem(paths[i]); QTableWidgetItem* localItem = new QTableWidgetItem(paths[i + 1]); QTableWidgetItem* remoteItem = new QTableWidgetItem(paths[i + 2]); @@ -302,6 +331,48 @@ void Compare::LoadTitles() } } +void Compare::Search() +{ + auto key = ui->edSearch->text().trimmed(); + if (key.isEmpty()) { + return; + } + + key = key.toUpper(); + QVector result; + for (const auto& item : items_) { + auto baseNameU = item.baseName.toUpper(); + auto localDirU = item.localDir.toUpper(); + auto remoteDirU = item.remoteDir.toUpper(); + + if (baseNameU.contains(key) || localDirU.contains(key) || remoteDirU.contains(key)) { + result.push_back(item); + } + } + SetResult(result); + isResource_ = false; + ui->tableWidget->setIsResource(isResource_); +} + +void Compare::Reset() +{ + SetResult(items_); + isResource_ = true; + ui->tableWidget->setIsResource(isResource_); +} + +void Compare::SetResult(const QVector& items) +{ + ui->tableWidget->setRowCount(0); + for (const auto& item : items) { + int row = ui->tableWidget->rowCount(); + ui->tableWidget->insertRow(row); + ui->tableWidget->setItem(row, 0, new QTableWidgetItem(item.baseName)); + ui->tableWidget->setItem(row, 1, new QTableWidgetItem(item.localDir)); + ui->tableWidget->setItem(row, 2, new QTableWidgetItem(item.remoteDir)); + } +} + void Compare::TransToLeft() { QVector tasks; diff --git a/Gui/Control/CompareControl.h b/Gui/Control/CompareControl.h index dddd8f1..68ed168 100644 --- a/Gui/Control/CompareControl.h +++ b/Gui/Control/CompareControl.h @@ -10,6 +10,12 @@ namespace Ui { class Compare; } +struct CompareItem { + QString baseName; + QString localDir; + QString remoteDir; +}; + class Compare : public QWidget { Q_OBJECT @@ -31,6 +37,9 @@ private: void Save(); void Load(); void LoadTitles(); + void Search(); + void Reset(); + void SetResult(const QVector& items); void TransToLeft(); void TransToRight(); @@ -41,6 +50,10 @@ private slots: private: QMenu* menu_; Ui::Compare* ui; + + // 现要求,保存、删除、拖入必须重置。 + bool isResource_{}; + QVector items_; }; #endif // COMPARECONTROL_H diff --git a/Gui/Control/CompareControl.ui b/Gui/Control/CompareControl.ui index cd3688a..3d7acdf 100644 --- a/Gui/Control/CompareControl.ui +++ b/Gui/Control/CompareControl.ui @@ -90,14 +90,14 @@ - + 搜索 - + 重置 diff --git a/Gui/Control/cpTableWidget.cpp b/Gui/Control/cpTableWidget.cpp index 93d7013..c5b5372 100644 --- a/Gui/Control/cpTableWidget.cpp +++ b/Gui/Control/cpTableWidget.cpp @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -17,8 +18,19 @@ CpTableWidget::~CpTableWidget() { } +void CpTableWidget::setIsResource(bool isResource) +{ + isResource_ = isResource; +} + void CpTableWidget::dropEvent(QDropEvent* event) { + if (!isResource_) { + QMessageBox::information(this, tr("提示"), tr("请先重置搜索结果后操作。")); + event->ignore(); + return; + } + if (!event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) { event->ignore(); return; diff --git a/Gui/Control/cpTableWidget.h b/Gui/Control/cpTableWidget.h index 49301fa..1d4f111 100644 --- a/Gui/Control/cpTableWidget.h +++ b/Gui/Control/cpTableWidget.h @@ -13,9 +13,15 @@ public: explicit CpTableWidget(QWidget* parent = nullptr); ~CpTableWidget() override; +public: + void setIsResource(bool isResource); + protected: void dropEvent(QDropEvent* event) override; void dragEnterEvent(QDragEnterEvent* event); + +private: + bool isResource_{}; }; #endif // CP_TABLEWIDET_H diff --git a/Gui/GuiUtil/Public.cpp b/Gui/GuiUtil/Public.cpp index 73eb049..9cad601 100644 --- a/Gui/GuiUtil/Public.cpp +++ b/Gui/GuiUtil/Public.cpp @@ -5,7 +5,7 @@ void FTCommon::msg(QWidget* parent, const QString& content) { - QMessageBox::information(parent, QObject::tr("prompt"), content); + QMessageBox::information(parent, QObject::tr("提示"), content); } bool FTCommon::affirm(QWidget* parent, const QString& titile, const QString& content) diff --git a/Note/version.md b/Note/version.md index ceb388b..1344caf 100644 --- a/Note/version.md +++ b/Note/version.md @@ -8,6 +8,10 @@ | 序号 | 类型 | 内容 | 说明 | 基于版本 | 完成版本 | | :--: | :--: | ------------------------------------------------------------ | :--: | :------: | :------: | +| 36 | 功能 | 备份文件功能。 | | 0.2.3 | | +| 35 | 功能 | 完善对照功能的界面其他内容。 | | 0.2.3 | | +| 34 | 功能 | 支持删除、重命名、新建文件(夹)。 | | 0.2.3 | | +| 33 | 功能 | 弹窗查看文件(夹)属性窗口。 | | 0.2.3 | | | 32 | 功能 | 路径选择显示驱动器。 | | 0.2.2 | 0.2.3 | | 31 | 功能 | Server端buffer大小判断,有过多无效数据则踢出该客户端。 | | 0.2.2 | | | 30 | 功能 | 传输界面的取消退出,缺失功能处理。 | | 0.2.2 | 0.2.3 |