GrabBag/AppUtils/AppCommon/Inc/BatchValidation.h
2026-10-30 14:07:40 +08:00

90 lines
3.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef BATCHVALIDATION_H
#define BATCHVALIDATION_H
#include <QVector>
#include <QString>
#include <QStringList>
#include <functional>
class QWidget;
class QObject;
struct BatchValidationItem
{
QString inputPath;
QString companionPath;
};
// 默认值即为“2D 图片 + TXT 点云按文件名配对”的批量复检配置,
// 应用通常无需填写任何字段;特殊项目只需在默认值上增删。
struct BatchValidationOptions
{
QStringList inputNameFilters{QStringLiteral("*.png"), QStringLiteral("*.jpg"),
QStringLiteral("*.jpeg"), QStringLiteral("*.bmp")};
QStringList companionNameFilters{QStringLiteral("*.txt")};
// 常见命名:<序号>_origin.png / <序号>_input.png / <序号>_2d_input.png
// 配 <序号>_cloud.txt / <序号>.txt
QStringList inputSuffixAliases{QStringLiteral("_2d_input"), QStringLiteral("_origin"),
QStringLiteral("_input")};
QStringList companionSuffixAliases{QStringLiteral("_2d_input"), QStringLiteral("_input"),
QStringLiteral("_origin"), QStringLiteral("_cloud")};
// 不限制输入后缀,只按文件名关键字排除生成文件:复检输出(_reinspection)
// 以及结果图、结果 txt、掩膜。
QStringList excludedKeywords{QStringLiteral("_reinspection"),
QStringLiteral("result"),
QStringLiteral("mask")};
bool allowMultipleInputsPerCompanion = false;
bool requireCompanion = true;
bool recursive = true;
};
struct BatchValidationSummary
{
int attempted = 0;
int succeeded = 0;
int failed = 0;
};
// Shared file selection, directory enumeration, pairing and sequential
// processing for offline validation flows in application projects.
class BatchValidation
{
public:
using Processor = std::function<int(const BatchValidationItem&)>;
using ProgressCallback = std::function<void(const BatchValidationItem&, int, int)>;
using CompletionCallback = std::function<void(const BatchValidationSummary&)>;
using StartedCallback = std::function<void(int)>;
static QString SelectFileOrDirectory(QWidget* parent,
const QString& title,
const QString& nameFilter,
const QString& initialPath = QString());
static QVector<BatchValidationItem> Collect(
const QString& inputPath,
const BatchValidationOptions& options = BatchValidationOptions());
static QVector<BatchValidationItem> CollectTextData(const QString& inputPath);
// 批量复检进度百分比,例如 12.34%。
static QString ProgressPercent(int index, int total);
static BatchValidationSummary ProcessSequentially(
const QVector<BatchValidationItem>& items,
const Processor& processor,
const ProgressCallback& progress = ProgressCallback());
static bool StartTextDataValidation(
QObject* context,
QWidget* dialogParent,
const QString& title,
const Processor& processor,
const ProgressCallback& progress,
const CompletionCallback& completion,
QString* errorMessage = nullptr,
const StartedCallback& started = StartedCallback());
};
#endif // BATCHVALIDATION_H