search:对照功能搜索筛选添加。

This commit is contained in:
2025-11-11 22:30:45 +08:00
parent bbd0f8b36f
commit 7c4b76d844
9 changed files with 119 additions and 11 deletions

10
.vscode/settings.json vendored
View File

@@ -16,14 +16,14 @@
"args": [] "args": []
}, },
"cmake.configureSettings": { "cmake.configureSettings": {
//"CMAKE_PREFIX_PATH": "C:/Qt/6.8.3/mingw_64", "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/Qt5.7.1/5.7/mingw53_32",
//"CMAKE_TOOLCHAIN_FILE": "${env:TT_VCPKG}" //"CMAKE_TOOLCHAIN_FILE": "${env:TT_VCPKG}"
}, },
"cmake.configureArgs": [ "cmake.configureArgs": [
"-Wno-dev", "-Wno-dev",
"-DCOMPILE_GUI=ON", "-DCOMPILE_GUI=ON",
"-DQT_DEFAULT_MAJOR_VERSION=5" "-DQT_DEFAULT_MAJOR_VERSION=6"
], ],
"cmake.options.statusBarVisibility": "visible", "cmake.options.statusBarVisibility": "visible",
"cmake.generator": "Ninja", "cmake.generator": "Ninja",
@@ -147,7 +147,9 @@
"qpushbutton": "cpp", "qpushbutton": "cpp",
"qpainter": "cpp", "qpainter": "cpp",
"qdialog": "cpp", "qdialog": "cpp",
"quuid": "cpp" "quuid": "cpp",
"complex": "cpp",
"expected": "cpp"
}, },
"editor.tokenColorCustomizations": { "editor.tokenColorCustomizations": {
"textMateRules": [ "textMateRules": [

View File

@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.16) 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 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)

View File

@@ -82,6 +82,8 @@ void Compare::InitControl()
connect(ui->btnLoad, &QPushButton::clicked, this, &Compare::Load); connect(ui->btnLoad, &QPushButton::clicked, this, &Compare::Load);
connect(ui->btnLeft, &QPushButton::clicked, this, &Compare::TransToLeft); connect(ui->btnLeft, &QPushButton::clicked, this, &Compare::TransToLeft);
connect(ui->btnRight, &QPushButton::clicked, this, &Compare::TransToRight); 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]() { connect(ui->btnReplace, &QPushButton::clicked, this, [this]() {
@@ -130,6 +132,11 @@ void Compare::Save()
return; return;
} }
if (!isResource_) {
QMessageBox::information(this, tr("提示"), tr("请先重置搜索结果后操作。"));
return;
}
QFile file("CompareData.xml"); QFile file("CompareData.xml");
if (!file.open(QIODevice::ReadWrite | QIODevice::Text)) { if (!file.open(QIODevice::ReadWrite | QIODevice::Text)) {
FTCommon::msg(this, tr("打开数据文件失败。")); FTCommon::msg(this, tr("打开数据文件失败。"));
@@ -165,13 +172,26 @@ void Compare::Save()
} }
QStringList paths; QStringList paths;
items_.clear();
for (int row = 0; row < ui->tableWidget->rowCount(); ++row) { for (int row = 0; row < ui->tableWidget->rowCount(); ++row) {
QTableWidgetItem* fileName = ui->tableWidget->item(row, 0); QTableWidgetItem* fileName = ui->tableWidget->item(row, 0);
QTableWidgetItem* localItem = ui->tableWidget->item(row, 1); QTableWidgetItem* localItem = ui->tableWidget->item(row, 1);
QTableWidgetItem* remoteItem = ui->tableWidget->item(row, 2); QTableWidgetItem* remoteItem = ui->tableWidget->item(row, 2);
paths << (fileName ? fileName->text() : "");
paths << (localItem ? localItem->text() : ""); auto baseName = (fileName ? fileName->text() : "");
paths << (remoteItem ? remoteItem->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; dataMap[titleKey] = paths;
@@ -221,6 +241,9 @@ void Compare::Load()
return; return;
} }
items_.clear();
isResource_ = true;
ui->tableWidget->setIsResource(isResource_);
QXmlStreamReader reader(&file); QXmlStreamReader reader(&file);
bool found = false; bool found = false;
@@ -247,6 +270,12 @@ void Compare::Load()
int row = ui->tableWidget->rowCount(); int row = ui->tableWidget->rowCount();
ui->tableWidget->insertRow(row); 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* fileName = new QTableWidgetItem(paths[i]);
QTableWidgetItem* localItem = new QTableWidgetItem(paths[i + 1]); QTableWidgetItem* localItem = new QTableWidgetItem(paths[i + 1]);
QTableWidgetItem* remoteItem = new QTableWidgetItem(paths[i + 2]); 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<CompareItem> 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<CompareItem>& 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() void Compare::TransToLeft()
{ {
QVector<TransTask> tasks; QVector<TransTask> tasks;

View File

@@ -10,6 +10,12 @@ namespace Ui {
class Compare; class Compare;
} }
struct CompareItem {
QString baseName;
QString localDir;
QString remoteDir;
};
class Compare : public QWidget class Compare : public QWidget
{ {
Q_OBJECT Q_OBJECT
@@ -31,6 +37,9 @@ private:
void Save(); void Save();
void Load(); void Load();
void LoadTitles(); void LoadTitles();
void Search();
void Reset();
void SetResult(const QVector<CompareItem>& items);
void TransToLeft(); void TransToLeft();
void TransToRight(); void TransToRight();
@@ -41,6 +50,10 @@ private slots:
private: private:
QMenu* menu_; QMenu* menu_;
Ui::Compare* ui; Ui::Compare* ui;
// 现要求,保存、删除、拖入必须重置。
bool isResource_{};
QVector<CompareItem> items_;
}; };
#endif // COMPARECONTROL_H #endif // COMPARECONTROL_H

View File

@@ -90,14 +90,14 @@
<widget class="QLineEdit" name="edSearch"/> <widget class="QLineEdit" name="edSearch"/>
</item> </item>
<item> <item>
<widget class="QPushButton" name="pushButton"> <widget class="QPushButton" name="btnSearch">
<property name="text"> <property name="text">
<string>搜索</string> <string>搜索</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QPushButton" name="pushButton_2"> <widget class="QPushButton" name="btnReset">
<property name="text"> <property name="text">
<string>重置</string> <string>重置</string>
</property> </property>

View File

@@ -2,6 +2,7 @@
#include <QApplication> #include <QApplication>
#include <QDrag> #include <QDrag>
#include <QMessageBox>
#include <QMimeData> #include <QMimeData>
#include <QPainter> #include <QPainter>
#include <Util.h> #include <Util.h>
@@ -17,8 +18,19 @@ CpTableWidget::~CpTableWidget()
{ {
} }
void CpTableWidget::setIsResource(bool isResource)
{
isResource_ = isResource;
}
void CpTableWidget::dropEvent(QDropEvent* event) void CpTableWidget::dropEvent(QDropEvent* event)
{ {
if (!isResource_) {
QMessageBox::information(this, tr("提示"), tr("请先重置搜索结果后操作。"));
event->ignore();
return;
}
if (!event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) { if (!event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) {
event->ignore(); event->ignore();
return; return;

View File

@@ -13,9 +13,15 @@ public:
explicit CpTableWidget(QWidget* parent = nullptr); explicit CpTableWidget(QWidget* parent = nullptr);
~CpTableWidget() override; ~CpTableWidget() override;
public:
void setIsResource(bool isResource);
protected: protected:
void dropEvent(QDropEvent* event) override; void dropEvent(QDropEvent* event) override;
void dragEnterEvent(QDragEnterEvent* event); void dragEnterEvent(QDragEnterEvent* event);
private:
bool isResource_{};
}; };
#endif // CP_TABLEWIDET_H #endif // CP_TABLEWIDET_H

View File

@@ -5,7 +5,7 @@
void FTCommon::msg(QWidget* parent, const QString& content) 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) bool FTCommon::affirm(QWidget* parent, const QString& titile, const QString& content)

View File

@@ -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 | | 32 | 功能 | 路径选择显示驱动器。 | | 0.2.2 | 0.2.3 |
| 31 | 功能 | Server端buffer大小判断,有过多无效数据则踢出该客户端。 | | 0.2.2 | | | 31 | 功能 | Server端buffer大小判断,有过多无效数据则踢出该客户端。 | | 0.2.2 | |
| 30 | 功能 | 传输界面的取消退出,缺失功能处理。 | | 0.2.2 | 0.2.3 | | 30 | 功能 | 传输界面的取消退出,缺失功能处理。 | | 0.2.2 | 0.2.3 |