This commit is contained in:
2025-11-14 00:35:50 +08:00
parent cf6368f064
commit b2b295ea72
15 changed files with 677 additions and 192 deletions
View File
+36 -36
View File
@@ -1,5 +1,5 @@
#pragma once
#include <translation.h>
#include <QDialog>
#include <QTableWidget>
#include <QPlainTextEdit>
@@ -40,7 +40,7 @@ class JsonParamTableEditor : public QDialog {
public:
explicit JsonParamTableEditor(QWidget* parent = nullptr)
: QDialog(parent) {
this->setWindowTitle("JSON 表格编辑器");
this->setWindowTitle(TR("JSON Table Editor"));
this->resize(700, 450);
setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint);// 去掉边框
//setAttribute(Qt::WA_TranslucentBackground); // 背景透明
@@ -76,7 +76,7 @@ public:
m_tableView->setFocusPolicy(Qt::NoFocus);
//设置表头
m_tableModel->setHorizontalHeaderLabels({ "选项", "值" });
m_tableModel->setHorizontalHeaderLabels({ TR("Option"), TR("Value") });
//设置表格属性
m_tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
@@ -85,8 +85,8 @@ public:
m_tableView->setColumnWidth(1, 200);// 选项列宽度
fancyButtonText* okBtn = new fancyButtonText("保存", 70, 22, "");
fancyButtonText* cancelBtn = new fancyButtonText("取消", 70, 22, "");
fancyButtonText* okBtn = new fancyButtonText(TR("Save"), 70, 22, "");
fancyButtonText* cancelBtn = new fancyButtonText(TR("Cancel"), 70, 22, "");
connect(okBtn, &QPushButton::clicked, this, &JsonParamTableEditor::onAccept);
connect(cancelBtn, &QPushButton::clicked, this, &QDialog::reject);
@@ -222,20 +222,20 @@ private slots:
for (int row = 0; row < m_tableModel->rowCount(); ++row) {
QStandardItem* keyItem = m_tableModel->item(row, 0);
if (!keyItem) {
QMessageBox::warning(this, "错误", QString("第 %1 行数据不完整").arg(row + 1));
QMessageBox::warning(this, TR("Error"), QString(TR("Row %1 data is incomplete")).arg(row + 1));
return;
}
QString key = keyItem->text().trimmed();
if (key.isEmpty()) {
QMessageBox::warning(this, "错误", QString("第 %1 行 key 为空").arg(row + 1));
QMessageBox::warning(this, TR("Error"), QString(TR("Row %1 key is empty")).arg(row + 1));
return;
}
//获取原始类型
std::string keyStd = key.toStdString();
if (m_originalTypes.find(keyStd) == m_originalTypes.end()) {
QMessageBox::warning(this, "错误", QString("第 %1 行找不到原始类型信息").arg(row + 1));
QMessageBox::warning(this, TR("Error"), QString(TR("Original type information not found for row %1")).arg(row + 1));
return;
}
@@ -245,7 +245,7 @@ private slots:
nlohmann::json convertedValue;
QString errorMsg;
if (!getValueFromEditor(keyStd, expectedType, convertedValue, errorMsg)) {
QMessageBox::critical(this, "类型验证失败",QString("第 %1 行值验证失败:\n%2").arg(row + 1).arg(errorMsg));
QMessageBox::critical(this, TR("Type Validation Failed"), QString(TR("Row %1 value validation failed:\n%2")).arg(row + 1).arg(errorMsg));
return;
}
result[keyStd] = convertedValue;
@@ -318,7 +318,7 @@ private:
updateModelData(key, value ? "true" : "false");
return true;
}
errorMsg = "布尔值控件类型错误";
errorMsg = TR("Boolean control type mismatch");
return false;
}
case JsonValueType::Number: {
@@ -336,7 +336,7 @@ private:
}
return true;
}
errorMsg = "数字控件类型错误";
errorMsg = TR("Number control type mismatch");
return false;
}
case JsonValueType::String: {
@@ -347,7 +347,7 @@ private:
updateModelData(key, value);
return true;
}
errorMsg = "字符串控件类型错误";
errorMsg = TR("String control type mismatch");
return false;
}
default:
@@ -361,7 +361,7 @@ private:
}
}
catch (const std::exception& e) {
errorMsg = QString("获取值错误: %1").arg(e.what());
errorMsg = QString(TR("Get value error: %1")).arg(e.what());
return false;
}
}
@@ -447,19 +447,19 @@ private:
QString generateTypeHint(JsonValueType type) {
switch (type) {
case JsonValueType::String:
return "输入字符串值(不需要引号)";
return TR("Enter a string value (no quotes required)");
case JsonValueType::Number:
return "输入数字值(整数或小数)";
return TR("Enter a numeric value (integer or decimal)");
case JsonValueType::Boolean:
return "输入布尔值(true 或 false)";
return TR("Enter a boolean value (true or false)");
case JsonValueType::Array:
return "输入JSON数组格式,如:[1,2,3] 或 [\"a\",\"b\"]";
return TR("Enter a JSON array, e.g., [1,2,3] or [\"a\",\"b\"]");
case JsonValueType::Object:
return "输入JSON对象格式,如:{\"key\":\"value\"}";
return TR("Enter a JSON object, e.g., {\"key\":\"value\"}");
case JsonValueType::Null:
return "空值(输入 null)";
return TR("Null (enter null)");
default:
return "请输入有效的JSON值";
return TR("Please enter a valid JSON value");
}
}
@@ -470,7 +470,7 @@ private:
// 长度检查
if (trimmedInput.size() > 10240) {
errorMsg = "输入值过大(超过10240字符)";
errorMsg = TR("Input value too large (exceeds 10240 characters)");
return false;
}
@@ -494,7 +494,7 @@ private:
result = doubleVal;
return true;
}
errorMsg = "无效的数字格式";
errorMsg = TR("Invalid numeric format");
return false;
}
@@ -506,7 +506,7 @@ private:
result = false;
return true;
}
errorMsg = "布尔值只能是 true 或 false";
errorMsg = TR("Boolean must be true or false");
return false;
case JsonValueType::Null:
@@ -514,7 +514,7 @@ private:
result = nullptr;
return true;
}
errorMsg = "空值只能是 null";
errorMsg = TR("Null value must be null");
return false;
case JsonValueType::Array:
@@ -524,27 +524,27 @@ private:
// 验证类型是否匹配
if (expectedType == JsonValueType::Array && !result.is_array()) {
errorMsg = "期望数组格式,如:[1,2,3]";
errorMsg = TR("Expected array format, e.g., [1,2,3]");
return false;
}
if (expectedType == JsonValueType::Object && !result.is_object()) {
errorMsg = "期望对象格式,如:{\"key\":\"value\"}";
errorMsg = TR("Expected object format, e.g., {\"key\":\"value\"}");
return false;
}
return true;
}
default:
errorMsg = "未知的数据类型";
errorMsg = TR("Unknown data type");
return false;
}
}
catch (const nlohmann::json::parse_error& e) {
errorMsg = QString("JSON解析错误: %1").arg(e.what());
errorMsg = QString(TR("JSON parse error: %1")).arg(e.what());
return false;
}
catch (const std::exception& e) {
errorMsg = QString("转换错误: %1").arg(e.what());
errorMsg = QString(TR("Conversion error: %1")).arg(e.what());
return false;
}
}
@@ -556,17 +556,17 @@ class JsonEditorGeneral : public QDialog {
public:
explicit JsonEditorGeneral(QWidget* parent = nullptr)
: QDialog(parent) {
setWindowTitle("通用 JSON 编辑");
setWindowTitle(TR("General JSON Editor"));
m_textEdit = new QPlainTextEdit(this);
QPushButton* okBtn = new QPushButton("确定", this);
QPushButton* cancelBtn = new QPushButton("取消", this);
QPushButton* okBtn = new QPushButton(TR("OK"), this);
QPushButton* cancelBtn = new QPushButton(TR("Cancel"), this);
connect(okBtn, &QPushButton::clicked, this, &JsonEditorGeneral::onAccept);
connect(cancelBtn, &QPushButton::clicked, this, &QDialog::reject);
QVBoxLayout* mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(new QLabel("请输入 JSON:"));
mainLayout->addWidget(new QLabel(TR("Please enter JSON:")));
mainLayout->addWidget(m_textEdit);
QHBoxLayout* btnLayout = new QHBoxLayout();
@@ -589,12 +589,12 @@ private slots:
QString text = m_textEdit->toPlainText().trimmed();
if (text.isEmpty()) {
QMessageBox::warning(this, "警告", "JSON 内容不能为空");
QMessageBox::warning(this, TR("Warning"), TR("JSON content cannot be empty"));
return;
}
if (text.size() > 102400) {
QMessageBox::warning(this, "警告", "JSON 内容过大,可能导致崩溃");
QMessageBox::warning(this, TR("Warning"), TR("JSON content is too large and may cause a crash"));
return;
}
@@ -604,7 +604,7 @@ private slots:
accept();
}
catch (const std::exception& e) {
QMessageBox::critical(this, "解析错误", QString("JSON 解析失败:\n%1").arg(e.what()));
QMessageBox::critical(this, TR("Parse Error"), QString(TR("JSON parse failed:\n%1")).arg(e.what()));
}
}
-1
View File
@@ -54,7 +54,6 @@ MainWindow::MainWindow(appConfig* configIn, fSignalHub*bridgeIn, nlohmann::order
QObject::connect(_loadingWidget.manualBtn, &QPushButton::clicked, this, &MainWindow::switchToManulMode);
_displayWidget->historyImgs->hide();
#if skipLogin == 1
login(true);
-3
View File
@@ -417,9 +417,6 @@ public slots:
_loadingWidget.initLog->append(strIn);
}
}
void addDetHistoryData(bool isOK, historyPack _historyPack){
_displayWidget->historyImgs->addData(isOK, _historyPack);
}
void addCtData(int index, int value){
switch (index)
{
@@ -183,7 +183,6 @@ public:
ImageWidgetManager _ImageWidgetManager;
summaryDataManager* _summaryDataManager;
dsStatsWidget* _dsStatsWidget;
historyShowListWidget* historyImgs = new historyShowListWidget();
dayNightShiftHistogramWidget* _dayNightShiftHistogramWidget;
userSwitch* _userSwitch;
softwareDataDisplay* _softwareDataDisplay;
@@ -223,16 +222,10 @@ public:
//Layout->setColumnStretch(2, 1);
leftItemInit(config);
rightItemInit1();
rightItemInit2();
connectFunc();
//historyImgs->addData(true, "D:/CCD/yuantu/2024-06-04/23H/TEST/1 (1).bmp", QPixmap("D:/CCD/yuantu/2024-06-04/23H/TEST/1 (1).bmp"));
}
void rightItemInit1(){
QVBoxLayout* hLayout = new QVBoxLayout(rightWidget1);
hLayout->addWidget(historyImgs);
}
void rightItemInit2(){
QVBoxLayout* hLayout = new QVBoxLayout(rightWidget2);
{
@@ -290,34 +283,6 @@ public:
QWidget* titleWidget = new QWidget(this);
QFont font3("微软雅黑", 10, QFont::Bold);
#pragma region 打开配置文件按钮
{
/*QVBoxLayout* btnLayout = new QVBoxLayout();
QPushButton* btn = new QPushButton(this);
btn->setIcon(QIcon(":/TongYongUiIcon/TongYongUiIcon/9.paramSetting.png"));
btn->setFixedSize(QSize(50, 50));
btn->setIconSize(QSize(25, 25));
btn->setStyleSheet(R"(
QPushButton {
background-color: transparent;
border: none;
}
QPushButton:hover {
background-color: black;
border-radius: 5px;
}
)");
QLabel* text = new QLabel(config->_translation->translate("SettingJson"));
text->setFont(font3);
text->setPalette(palette);
btnLayout->addWidget(btn);
btnLayout->addWidget(text);
titleLayout->addLayout(btnLayout);
connect(btn, &QPushButton::clicked, [=]() {
QDesktopServices::openUrl(QUrl::fromLocalFile(QString::fromStdString(config->settingJsonPath)));
});*/
}
#pragma endregion
#pragma region 结果图查看按钮
{
_toolBarWidget->createToolButton(QIcon(":/TongYongUiIcon/TongYongUiIcon/23.1.imageView.png"),
@@ -401,11 +366,6 @@ public:
//leftWidget->setMaximumWidth(width / 1.2);
//rightWidget->setMaximumWidth(width / 2);
}
void connectFunc(){
QObject::connect(historyImgs, &historyShowListWidget::itemClickSignal,
this, &displayWidget::historyClick);
}
public slots:
+1 -1
View File
@@ -406,7 +406,7 @@ public:
consoleMainLayout->addWidget(btn);
}
{
fancyButtonText* btn = new fancyButtonText(u8"相机实时取流");
fancyButtonText* btn = new fancyButtonText(u8"相机实时取流(只适配软触发相机)");
QObject::connect(btn, &QPushButton::clicked, &_cameraRealTimeCapture, &QWidget::show);
consoleMainLayout->addWidget(btn);
}
+18 -18
View File
@@ -31,7 +31,7 @@ class paramTableEditor : public QDialog {
public:
explicit paramTableEditor(QWidget* parent = nullptr)
: QDialog(parent) {
this->setWindowTitle("JSON 表格编辑器");
this->setWindowTitle(TR("JSON Table Editor"));
this->resize(700, 450);
setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint);// 去掉边框
//setAttribute(Qt::WA_TranslucentBackground); // 背景透明
@@ -67,7 +67,7 @@ public:
m_tableView->setFocusPolicy(Qt::NoFocus);
//设置表头
m_tableModel->setHorizontalHeaderLabels({ "选项", "值" });
m_tableModel->setHorizontalHeaderLabels({ TR("Option"), TR("Value") });
//设置表格属性
m_tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
@@ -76,8 +76,8 @@ public:
m_tableView->setColumnWidth(1, 200);// 选项列宽度
fancyButtonText* okBtn = new fancyButtonText("保存", 70, 22, "");
fancyButtonText* cancelBtn = new fancyButtonText("取消", 70, 22, "");
fancyButtonText* okBtn = new fancyButtonText(TR("Save"), 70, 22, "");
fancyButtonText* cancelBtn = new fancyButtonText(TR("Cancel"), 70, 22, "");
connect(okBtn, &QPushButton::clicked, this, &paramTableEditor::onAccept);
connect(cancelBtn, &QPushButton::clicked, this, &QDialog::reject);
@@ -196,19 +196,19 @@ private slots:
for (int row = 0; row < m_tableModel->rowCount(); ++row) {
QStandardItem* keyItem = m_tableModel->item(row, 0);
if (!keyItem) {
QMessageBox::warning(this, "错误", QString("第 %1 行数据不完整").arg(row + 1));
QMessageBox::warning(this, TR("Error"), QString(TR("Row %1 data is incomplete")).arg(row + 1));
return;
}
QString key = keyItem->text().trimmed();
if (key.isEmpty()) {
QMessageBox::warning(this, "错误", QString("第 %1 行 key 为空").arg(row + 1));
QMessageBox::warning(this, TR("Error"), QString(TR("Row %1 key is empty")).arg(row + 1));
return;
}
//获取原始类型
if (m_originalTypes.find(key) == m_originalTypes.end()) {
QMessageBox::warning(this, "错误", QString("第 %1 行找不到原始类型信息").arg(row + 1));
QMessageBox::warning(this, TR("Error"), QString(TR("Original type information not found for row %1")).arg(row + 1));
return;
}
@@ -218,7 +218,7 @@ private slots:
QVariant convertedValue;
QString errorMsg;
if (!getValueFromEditor(key, expectedType, convertedValue, errorMsg)) {
QMessageBox::critical(this, "类型验证失败",QString("第 %1 行值验证失败:\n%2").arg(row + 1).arg(errorMsg));
QMessageBox::critical(this, TR("Type Validation Failed"),QString(TR("Row %1 value validation failed:\n%2")).arg(row + 1).arg(errorMsg));
return;
}
//esult[keyStd] = convertedValue;
@@ -291,7 +291,7 @@ private:
updateModelData(key, value ? "true" : "false");
return true;
}
errorMsg = "布尔值控件类型错误";
errorMsg = TR("Boolean control type mismatch");
return false;
}
case QVariant::Type::Int: {
@@ -302,7 +302,7 @@ private:
updateModelData(key, QString::number(value));
return true;
}
errorMsg = "数字控件INT类型错误";
errorMsg = TR("Integer number control type mismatch");
return false;
}
case QVariant::Type::Double: {
@@ -313,7 +313,7 @@ private:
updateModelData(key, QString::number(value));
return true;
}
errorMsg = "数字控件INT类型错误";
errorMsg = TR("Number control type mismatch");
return false;
}
case QVariant::Type::String: {
@@ -324,7 +324,7 @@ private:
updateModelData(key, value);
return true;
}
errorMsg = "字符串控件类型错误";
errorMsg = TR("String control type mismatch");
return false;
}
//default:
@@ -338,7 +338,7 @@ private:
//}
}
catch (const std::exception& e) {
errorMsg = QString("获取值错误: %1").arg(e.what());
errorMsg = QString(TR("Get value error: %1")).arg(e.what());
return false;
}
return false;
@@ -379,15 +379,15 @@ private:
QString generateTypeHint(QVariant::Type type) {
switch (type) {
case QVariant::Type::String:
return "输入字符串值(不需要引号)";
return TR("Enter a string value (no quotes required)");
case QVariant::Type::Int:
return "输入数字值(整数)";
return TR("Enter an integer value");
case QVariant::Type::Double:
return "输入数字值(小数)";
return TR("Enter a decimal value");
case QVariant::Type::Bool:
return "输入布尔值(true 或 false)";
return TR("Enter a boolean value (true or false)");
default:
return "请输入有效的JSON值";
return TR("Please enter a valid JSON value");
}
}
@@ -1,71 +0,0 @@
#include <qlayout.h>
#include <qwidget.h>
#include <qlabel.h>
class OnceDataDisplay :public QWidget
{
public:
QVBoxLayout* layout;
QLabel* title;
QLabel* widthValueLabel;
QLabel* heightValueLabel;
QWidget* dataPanel;
OnceDataDisplay()
{
this->setObjectName("OnceDataDisplay");
this->setStyleSheet("QWidget#OnceDataDisplay {"
" border: 2px solid white;"
" border-radius: 10px;"
"}");
layout = new QVBoxLayout();
layout->setAlignment(Qt::AlignTop);
this->setLayout(layout);
title = new QLabel(u8"本次运行数据");
QFont font("微软雅黑", 16, QFont::Bold);
QPalette palette;
palette.setColor(QPalette::WindowText, Qt::white);
title->setFont(font);
title->setPalette(palette);
title->setAlignment(Qt::AlignCenter);
title->setObjectName("titleLabel");
title->setStyleSheet("QLabel#titleLabel {"
" border: 4px solid white;"
" border-radius: 12px;"
"}");
dataPanel = new QWidget;
dataPanel->setObjectName("dataPanel");
dataPanel->setStyleSheet("QWidget#dataPanel {"
" border: 2px solid white;"
" border-radius: 3px;"
"}");
QVBoxLayout* dataPanelVboxLayout = new QVBoxLayout();
dataPanel->setLayout(dataPanelVboxLayout);
QFont font2("微软雅黑", 8, QFont::Bold);
QHBoxLayout* widthVLayout = new QHBoxLayout();
QLabel* widthTextLabel = new QLabel(u8"长度");
widthValueLabel = new QLabel(u8"待读取");
widthVLayout->addWidget(widthTextLabel);
widthVLayout->addWidget(widthValueLabel);
widthTextLabel->setPalette(palette);
widthValueLabel->setPalette(palette);
QHBoxLayout* heightVLayout = new QHBoxLayout();
QLabel* heightTextLabel = new QLabel(u8"宽度:");
heightValueLabel = new QLabel(u8"待读取");
heightVLayout->addWidget(heightTextLabel);
heightVLayout->addWidget(heightValueLabel);
heightTextLabel->setPalette(palette);
heightValueLabel->setPalette(palette);
dataPanelVboxLayout->addLayout(widthVLayout);
dataPanelVboxLayout->addLayout(heightVLayout);
layout->addWidget(title);
layout->addWidget(dataPanel);
}
};
#pragma once
@@ -125,7 +125,7 @@ class historyShowListWidget : public QWidget
{
Q_OBJECT
public:
QLabel* title = new QLabel(u8"历史记录");
QLabel* title = new QLabel(TR("History"));
QListWidget* showDataListWidget = new QListWidget();
QVBoxLayout* layout = new QVBoxLayout(this);
historyShowListSubThread _historyShowListSubThread;
@@ -1,4 +1,5 @@
#pragma once
#include <translation.h>
#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
@@ -412,12 +413,12 @@ public:
)"
);
zoombtn->setIcon(QPixmap(":icon/icon/fullscreen.png"));
zoombtn->setToolTip("放大窗口");
zoombtn->setToolTip(TR("Zoom In"));
hLayout->addWidget(zoombtn);
connect(zoombtn, &QPushButton::clicked, this, &ImageWidget::toggleZoom);
label = new QLabel(u8"相机标签");
label = new QLabel(TR("Camera Label"));
label->setAlignment(Qt::AlignLeft);
label->setFont(font);
label->setPalette(palette);
@@ -608,7 +609,7 @@ public slots:
// 更新按钮状态
isZoomed = true;
zoombtn->setIcon(QIcon(":/icon/icon/fullscreen-exit.png"));
zoombtn->setToolTip("缩小窗口");
zoombtn->setToolTip(TR("Zoom Out"));
// 强制更新布局
parentGridLayout->update();
@@ -629,7 +630,7 @@ public slots:
//更新按钮状态
isZoomed = false;
zoombtn->setIcon(QIcon(":/icon/icon/fullscreen.png"));
zoombtn->setToolTip("放大窗口");
zoombtn->setToolTip(TR("Zoom In"));
//强制更新布局
parentGridLayout->update();
@@ -20,10 +20,10 @@ public:
QPalette palette;
palette.setColor(QPalette::WindowText, Qt::white);
returnBtn = new fancyButton(40,40, QIcon(":/icon/icon/rollback.png"),"返回上一级");
returnBtn = new fancyButton(40,40, QIcon(":/icon/icon/rollback.png"),TR("Go Back"));
layout->addWidget(returnBtn);
homeBtn = new fancyButton(40, 40, QIcon(":/icon/icon/home2.png"), "返回目录");
homeBtn = new fancyButton(40, 40, QIcon(":/icon/icon/home2.png"), TR("Back to Menu"));
layout->addWidget(homeBtn);
dirLabel->setText(title);
@@ -61,7 +61,7 @@ class runCommandWidget : public QDialog {
public:
explicit runCommandWidget(QWidget* parent = nullptr)
: QDialog(parent) {
this->setWindowTitle("执行命令");
this->setWindowTitle(TR("Execute Command"));
this->setObjectName("runCommandWidget");
this->setStyleSheet(QString("QDialog#runCommandWidget {background-color: rgb(%1);border: 2px solid #000000;border-radius: 6px;}").arg(sColor_Blue));
@@ -99,10 +99,10 @@ public slots:
connect(funcBtn, &fancyButtonText::clicked, this, [this, uuid]() {
QMessageBox::StandardButton reply;
reply = QMessageBox::question(
this, // 父窗口
"提示", // 标题
"确定要执行此操作吗?", // 内容
QMessageBox::Yes | QMessageBox::No // 按钮
this, // parent
TR("Confirm"), // title
TR("Are you sure you want to execute this action?"), // content
QMessageBox::Yes | QMessageBox::No // buttons
);
if (reply == QMessageBox::Yes) {
emit excuteCommandPreset(uuid);
@@ -56,7 +56,7 @@ public:
runStateIconLabel->setPixmap(scaledPixmap);
runStateIconLabel->setFixedSize(25, 25);
runStateText = new QLabel("正在检测...");
runStateText = new QLabel(TR("Detecting..."));
runStateText->setFont(font);
runStateText->setPalette(palette);
@@ -105,15 +105,15 @@ private slots:
runStateText->setStyleSheet(QString("QLabel { %1 }").arg(colorStyle));
// 设置工具提示显示详细信息
QString tooltip = QString("系统状态: %1\n");
QString tooltip = QString(TR("System status: %1\n"));
runStateText->setToolTip(tooltip);
}
void onMonitorError(const QString& error) {
runStateText->setText("监控异常");
runStateText->setStyleSheet("QLabel { color: #999; }");
runStateText->setToolTip(QString("监控错误: %1").arg(error));
runStateText->setText(TR("Monitoring Error"));
runStateText->setStyleSheet("QLabel { color: #999; }");
runStateText->setToolTip(QString(TR("Monitor error: %1")).arg(error));
}
public slots:
void onTriggerSateChanged(int loopCounterPerMin, int maxInterval) {
@@ -33,7 +33,7 @@ public:
vlayout1->setContentsMargins(0, 0, 0, 0);
{
QHBoxLayout* tempLayout = new QHBoxLayout();
QLabel* tempLabel = new QLabel(dataName + u8"OK数量:");
QLabel* tempLabel = new QLabel(dataName + TR(" OK Count:"));
tempLabel->setFont(font);
tempLabel->setPalette(palette);
@@ -46,7 +46,7 @@ public:
}
{
QHBoxLayout* tempLayout = new QHBoxLayout();
QLabel* tempLabel = new QLabel(dataName + u8"NG数量:");
QLabel* tempLabel = new QLabel(dataName + TR(" NG Count:"));
tempLabel->setFont(font);
tempLabel->setPalette(palette);
@@ -59,7 +59,7 @@ public:
}
{
QHBoxLayout* tempLayout = new QHBoxLayout();
QLabel* tempLabel = new QLabel(dataName + u8"总数量:");
QLabel* tempLabel = new QLabel(dataName + TR(" Total Count:"));
tempLabel->setFont(font);
tempLabel->setPalette(palette);
@@ -127,7 +127,7 @@ public:
palette.setColor(QPalette::WindowText, Qt::white);
QFont font("微软雅黑", 14, QFont::Bold);
QFont font2("微软雅黑", 20, QFont::Bold);
widget = new fancyWidget(u8" 运行数据");
widget = new fancyWidget(TR(" Run Data"));
/* fancyButtonText* resetBtn = new fancyButtonText(80,40,u8"重置", u8"重置跑料数据");
QObject::connect(resetBtn, &QPushButton::clicked, this, &summaryDataManager::resetAllValue);
+599
View File
@@ -0,0 +1,599 @@
{
"current_language": "zh-CN",
"section": [
"us-EN",
"zh-CN",
"ms-MY"
],
"translate": {
"AI Detection System": {
"ms-MY": "Sistem Pengesanan AI",
"us-EN": "AI Detection System",
"zh-CN": "AI检测系统"
},
"All password fields cannot be empty": {
"ms-MY": "Semua medan kata laluan tidak boleh kosong",
"us-EN": "All password fields cannot be empty",
"zh-CN": "所有密码字段都不能为空"
},
"Auto Logout": {
"ms-MY": "Auto Log Keluar",
"us-EN": "Auto Logout",
"zh-CN": "自动注销"
},
"Change Password": {
"ms-MY": "Tukar Kata Laluan",
"us-EN": "Change Password",
"zh-CN": "修改密码"
},
"Close": {
"ms-MY": "Tutup",
"us-EN": "Close",
"zh-CN": "关闭"
},
"Confirm Password:": {
"ms-MY": "Sahkan Kata Laluan:",
"us-EN": "Confirm Password:",
"zh-CN": "确认密码:"
},
"Console Settings": {
"ms-MY": "Tetapan Konsol",
"us-EN": "Console Settings",
"zh-CN": "控制台设置"
},
"Create User": {
"ms-MY": "Cipta Pengguna",
"us-EN": "Create User",
"zh-CN": "创建用户"
},
"Current Password:": {
"ms-MY": "Kata Laluan Semasa:",
"us-EN": "Current Password:",
"zh-CN": "当前密码:"
},
"Current User Information": {
"ms-MY": "Maklumat Pengguna Semasa",
"us-EN": "Current User Information",
"zh-CN": "当前用户信息"
},
"Current User: ": {
"ms-MY": "Pengguna Semasa: ",
"us-EN": "Current User: ",
"zh-CN": "当前用户: "
},
"Current User: Not logged in": {
"ms-MY": "Pengguna Semasa: Tidak log masuk",
"us-EN": "Current User: Not logged in",
"zh-CN": "当前用户: 未登录"
},
"Current user logged out": {
"ms-MY": "Pengguna semasa telah log keluar",
"us-EN": "Current user logged out",
"zh-CN": "已注销当前用户"
},
"Debug": {
"ms-MY": "Penyelesaian Masalah",
"us-EN": "Debug",
"zh-CN": "故障排查"
},
"Do you want to exit the application?": {
"ms-MY": "Adakah anda mahu keluar daripada aplikasi?",
"us-EN": "Do you want to exit the application?",
"zh-CN": "是否退出程序?"
},
"Error": {
"ms-MY": "Ralat",
"us-EN": "Error",
"zh-CN": "错误"
},
"Exit Confirmation": {
"ms-MY": "Pengesahan Keluar",
"us-EN": "Exit Confirmation",
"zh-CN": "退出确认"
},
"Guest": {
"ms-MY": "Tetamu",
"us-EN": "Guest",
"zh-CN": "访客"
},
"Hardware Information": {
"ms-MY": "Maklumat Perkakasan",
"us-EN": "Hardware Information",
"zh-CN": "硬件信息"
},
"Insufficient permissions": {
"ms-MY": "Kebenaran tidak mencukupi",
"us-EN": "Insufficient permissions",
"zh-CN": "权限不足"
},
"Language Settings": {
"ms-MY": "Tetapan Bahasa",
"us-EN": "Language Settings",
"zh-CN": "语言设置"
},
"Log": {
"ms-MY": "Analisis Log",
"us-EN": "Log",
"zh-CN": "日志分析"
},
"Login": {
"ms-MY": "Log Masuk",
"us-EN": "Login",
"zh-CN": "登录"
},
"Login failed, please check username and password": {
"ms-MY": "Log masuk gagal, sila periksa nama pengguna dan kata laluan",
"us-EN": "Login failed, please check username and password",
"zh-CN": "登录失败,请检查用户名和密码"
},
"Login successful! System will auto logout in 3 minutes": {
"ms-MY": "Log masuk berjaya! Sistem akan auto log keluar dalam 3 minit",
"us-EN": "Login successful! System will auto logout in 3 minutes",
"zh-CN": "登录成功!系统将在3分钟后自动注销"
},
"Login/Logout": {
"ms-MY": "Log Masuk/Log Keluar",
"us-EN": "Login/Logout",
"zh-CN": "登录/注销"
},
"Logout": {
"ms-MY": "Log Keluar",
"us-EN": "Logout",
"zh-CN": "注销"
},
"New Password:": {
"ms-MY": "Kata Laluan Baru:",
"us-EN": "New Password:",
"zh-CN": "新密码:"
},
"New password and confirm password do not match": {
"ms-MY": "Kata laluan baru dan pengesahan kata laluan tidak sepadan",
"us-EN": "New password and confirm password do not match",
"zh-CN": "新密码和确认密码不匹配"
},
"New password must be at least 4 characters": {
"ms-MY": "Kata laluan baru mestilah sekurang-kurangnya 4 aksara",
"us-EN": "New password must be at least 4 characters",
"zh-CN": "新密码长度至少为4位"
},
"Param": {
"ms-MY": "Tetapan Parameter",
"us-EN": "Param",
"zh-CN": "参数设置"
},
"Password change failed, please check current password": {
"ms-MY": "Penukaran kata laluan gagal, sila periksa kata laluan semasa",
"us-EN": "Password change failed, please check current password",
"zh-CN": "密码修改失败,请检查当前密码"
},
"Password changed successfully!": {
"ms-MY": "Kata laluan berjaya ditukar!",
"us-EN": "Password changed successfully!",
"zh-CN": "密码修改成功!"
},
"Password must be at least 4 characters": {
"ms-MY": "Kata laluan mestilah sekurang-kurangnya 4 aksara",
"us-EN": "Password must be at least 4 characters",
"zh-CN": "密码长度至少为4位"
},
"Password:": {
"ms-MY": "Kata Laluan:",
"us-EN": "Password:",
"zh-CN": "密码:"
},
"Permission Level:": {
"ms-MY": "Tahap Kebenaran:",
"us-EN": "Permission Level:",
"zh-CN": "权限等级:"
},
"Permission Level: ": {
"ms-MY": "Tahap Kebenaran: ",
"us-EN": "Permission Level: ",
"zh-CN": "权限等级: "
},
"Permission Level: Guest": {
"ms-MY": "Tahap Kebenaran: Tetamu",
"us-EN": "Permission Level: Guest",
"zh-CN": "权限等级: 访客"
},
"Please create user first": {
"ms-MY": "Sila cipta pengguna dahulu",
"us-EN": "Please create user first",
"zh-CN": "请先创建用户"
},
"Remaining: ": {
"ms-MY": "Baki: ",
"us-EN": "Remaining: ",
"zh-CN": "剩余: "
},
"Setting": {
"ms-MY": "Tetapan",
"us-EN": "Setting",
"zh-CN": "设置"
},
"Success": {
"ms-MY": "Berjaya",
"us-EN": "Success",
"zh-CN": "成功"
},
"TOOLS": {
"ms-MY": "Alat",
"us-EN": "TOOLS",
"zh-CN": "工<br>具"
},
"Timed out": {
"ms-MY": "Masa tamat",
"us-EN": "Timed out",
"zh-CN": "已超时"
},
"User Management": {
"ms-MY": "Pengurusan Pengguna",
"us-EN": "User Management",
"zh-CN": "用户管理"
},
"User created successfully!": {
"ms-MY": "Pengguna berjaya dicipta!",
"us-EN": "User created successfully!",
"zh-CN": "用户创建成功!"
},
"User creation failed, username may already exist": {
"ms-MY": "Penciptaan pengguna gagal, nama pengguna mungkin sudah wujud",
"us-EN": "User creation failed, username may already exist",
"zh-CN": "用户创建失败,用户名可能已存在"
},
"Username and password cannot be empty": {
"ms-MY": "Nama pengguna dan kata laluan tidak boleh kosong",
"us-EN": "Username and password cannot be empty",
"zh-CN": "用户名和密码不能为空"
},
"Username:": {
"ms-MY": "Nama Pengguna:",
"us-EN": "Username:",
"zh-CN": "用户名:"
},
"ViewImage": {
"ms-MY": "Lihat Imej",
"us-EN": "View Image",
"zh-CN": "查看图片"
},
"Window Settings": {
"ms-MY": "Tetapan Tetingkap",
"us-EN": "Window Settings",
"zh-CN": "窗口设置"
},
"You need administrator permissions to create users": {
"ms-MY": "Anda memerlukan kebenaran pentadbir untuk mencipta pengguna",
"us-EN": "You need administrator permissions to create users",
"zh-CN": "您需要管理员权限才能创建用户"
},
"hideConsole": {
"ms-MY": "Sembunyikan Konsol",
"us-EN": "Hide Console",
"zh-CN": "隐藏控制台"
},
"refresh": {
"ms-MY": "Segarkan",
"us-EN": "Refresh",
"zh-CN": "刷新"
},
"showConsole": {
"ms-MY": "Tunjukkan Konsol",
"us-EN": "Show Console",
"zh-CN": "显示控制台"
},
"will change after restart": {
"ms-MY": "Akan berubah selepas restart",
"zh-CN": "重启后将会更改"
},
"History": {
"ms-MY": "History",
"us-EN": "History",
"zh-CN": "历史记录"
},
"Camera Label": {
"ms-MY": "Camera Label",
"us-EN": "Camera Label",
"zh-CN": "相机标签"
},
"Zoom In": {
"ms-MY": "Zoom In",
"us-EN": "Zoom In",
"zh-CN": "放大窗口"
},
"Zoom Out": {
"ms-MY": "Zoom Out",
"us-EN": "Zoom Out",
"zh-CN": "缩小窗口"
},
"Go Back": {
"ms-MY": "Go Back",
"us-EN": "Go Back",
"zh-CN": "返回上一级"
},
"Back to Menu": {
"ms-MY": "Back to Menu",
"us-EN": "Back to Menu",
"zh-CN": "返回目录"
},
"Current Run Data": {
"ms-MY": "Current Run Data",
"us-EN": "Current Run Data",
"zh-CN": "本次运行数据"
},
"Length": {
"ms-MY": "Length",
"us-EN": "Length",
"zh-CN": "长度"
},
"Pending": {
"ms-MY": "Pending",
"us-EN": "Pending",
"zh-CN": "待读取"
},
"Width:": {
"ms-MY": "Width:",
"us-EN": "Width:",
"zh-CN": "宽度:"
},
"Detecting...": {
"ms-MY": "Detecting...",
"us-EN": "Detecting...",
"zh-CN": "正在检测..."
},
"System status: %1\n": {
"ms-MY": "System status: %1\\n",
"us-EN": "System status: %1\\n",
"zh-CN": "系统状态: %1\\n"
},
"Monitoring Error": {
"ms-MY": "Monitoring Error",
"us-EN": "Monitoring Error",
"zh-CN": "监控异常"
},
"Monitor error: %1": {
"ms-MY": "Monitor error: %1",
"us-EN": "Monitor error: %1",
"zh-CN": "监控错误: %1"
},
"Execute Command": {
"ms-MY": "Execute Command",
"us-EN": "Execute Command",
"zh-CN": "执行命令"
},
"Confirm": {
"ms-MY": "Confirm",
"us-EN": "Confirm",
"zh-CN": "提示"
},
"Are you sure you want to execute this action?": {
"ms-MY": "Are you sure you want to execute this action?",
"us-EN": "Are you sure you want to execute this action?",
"zh-CN": "确定要执行此操作吗?"
},
"Run Data": {
"ms-MY": "Run Data",
"us-EN": "Run Data",
"zh-CN": "运行数据"
},
"OK Count": {
"ms-MY": "OK Count",
"us-EN": "OK Count",
"zh-CN": "OK数量"
},
"NG Count": {
"ms-MY": "NG Count",
"us-EN": "NG Count",
"zh-CN": "NG数量"
},
"Total Count": {
"ms-MY": "Total Count",
"us-EN": "Total Count",
"zh-CN": "总数量"
},
"JSON Table Editor": {
"ms-MY": "JSON Table Editor",
"us-EN": "JSON Table Editor",
"zh-CN": "JSON 表格编辑器"
},
"Option": {
"ms-MY": "Option",
"us-EN": "Option",
"zh-CN": "选项"
},
"Value": {
"ms-MY": "Value",
"us-EN": "Value",
"zh-CN": "值"
},
"Save": {
"ms-MY": "Save",
"us-EN": "Save",
"zh-CN": "保存"
},
"Cancel": {
"ms-MY": "Cancel",
"us-EN": "Cancel",
"zh-CN": "取消"
},
"Row %1 data is incomplete": {
"ms-MY": "Row %1 data is incomplete",
"us-EN": "Row %1 data is incomplete",
"zh-CN": "第 %1 行数据不完整"
},
"Row %1 key is empty": {
"ms-MY": "Row %1 key is empty",
"us-EN": "Row %1 key is empty",
"zh-CN": "第 %1 行 key 为空"
},
"Original type information not found for row %1": {
"ms-MY": "Original type information not found for row %1",
"us-EN": "Original type information not found for row %1",
"zh-CN": "第 %1 行找不到原始类型信息"
},
"Type Validation Failed": {
"ms-MY": "Type Validation Failed",
"us-EN": "Type Validation Failed",
"zh-CN": "类型验证失败"
},
"Row %1 value validation failed:\n%2": {
"ms-MY": "Row %1 value validation failed:\\n%2",
"us-EN": "Row %1 value validation failed:\\n%2",
"zh-CN": "第 %1 行值验证失败:\\n%2"
},
"Boolean control type mismatch": {
"ms-MY": "Boolean control type mismatch",
"us-EN": "Boolean control type mismatch",
"zh-CN": "布尔值控件类型错误"
},
"Number control type mismatch": {
"ms-MY": "Number control type mismatch",
"us-EN": "Number control type mismatch",
"zh-CN": "数字控件类型错误"
},
"String control type mismatch": {
"ms-MY": "String control type mismatch",
"us-EN": "String control type mismatch",
"zh-CN": "字符串控件类型错误"
},
"Get value error: %1": {
"ms-MY": "Get value error: %1",
"us-EN": "Get value error: %1",
"zh-CN": "获取值错误: %1"
},
"Enter a string value (no quotes required)": {
"ms-MY": "Enter a string value (no quotes required)",
"us-EN": "Enter a string value (no quotes required)",
"zh-CN": "输入字符串值(不需要引号)"
},
"Enter a numeric value (integer or decimal)": {
"ms-MY": "Enter a numeric value (integer or decimal)",
"us-EN": "Enter a numeric value (integer or decimal)",
"zh-CN": "输入数字值(整数或小数)"
},
"Enter a boolean value (true or false)": {
"ms-MY": "Enter a boolean value (true or false)",
"us-EN": "Enter a boolean value (true or false)",
"zh-CN": "输入布尔值(true 或 false)"
},
"Enter a JSON array, e.g., [1,2,3] or [\"a\",\"b\"]": {
"ms-MY": "Enter a JSON array, e.g., [1,2,3] or [\"a\",\"b\"]",
"us-EN": "Enter a JSON array, e.g., [1,2,3] or [\"a\",\"b\"]",
"zh-CN": "输入JSON数组格式,如:[1,2,3] 或 [\"a\",\"b\"]"
},
"Enter a JSON object, e.g., {\"key\":\"value\"}": {
"ms-MY": "Enter a JSON object, e.g., {\\\"key\\\":\\\"value\\\"}",
"us-EN": "Enter a JSON object, e.g., {\\\"key\\\":\\\"value\\\"}",
"zh-CN": "输入JSON对象格式,如:{\\\"key\\\":\\\"value\\\"}"
},
"Null (enter null)": {
"ms-MY": "Null (enter null)",
"us-EN": "Null (enter null)",
"zh-CN": "空值(输入 null)"
},
"Please enter a valid JSON value": {
"ms-MY": "Please enter a valid JSON value",
"us-EN": "Please enter a valid JSON value",
"zh-CN": "请输入有效的JSON值"
},
"Input value too large (exceeds 10240 characters)": {
"ms-MY": "Input value too large (exceeds 10240 characters)",
"us-EN": "Input value too large (exceeds 10240 characters)",
"zh-CN": "输入值过大(超过10240字符)"
},
"Invalid numeric format": {
"ms-MY": "Invalid numeric format",
"us-EN": "Invalid numeric format",
"zh-CN": "无效的数字格式"
},
"Boolean must be true or false": {
"ms-MY": "Boolean must be true or false",
"us-EN": "Boolean must be true or false",
"zh-CN": "布尔值只能是 true 或 false"
},
"Null value must be null": {
"ms-MY": "Null value must be null",
"us-EN": "Null value must be null",
"zh-CN": "空值只能是 null"
},
"Expected array format, e.g., [1,2,3]": {
"ms-MY": "Expected array format, e.g., [1,2,3]",
"us-EN": "Expected array format, e.g., [1,2,3]",
"zh-CN": "期望数组格式,如:[1,2,3]"
},
"Expected object format, e.g., {\"key\":\"value\"}": {
"ms-MY": "Expected object format, e.g., {\\\"key\\\":\\\"value\\\"}",
"us-EN": "Expected object format, e.g., {\\\"key\\\":\\\"value\\\"}",
"zh-CN": "期望对象格式,如:{\\\"key\\\":\\\"value\\\"}"
},
"Unknown data type": {
"ms-MY": "Jenis data tidak diketahui",
"us-EN": "Unknown data type",
"zh-CN": "未知的数据类型"
},
"JSON parse error: %1": {
"ms-MY": "Ralat parse JSON: %1",
"us-EN": "JSON parse error: %1",
"zh-CN": "JSON解析错误: %1"
},
"Conversion error: %1": {
"ms-MY": "Ralat penukaran: %1",
"us-EN": "Conversion error: %1",
"zh-CN": "转换错误: %1"
},
"General JSON Editor": {
"ms-MY": "Penyunting JSON Am",
"us-EN": "General JSON Editor",
"zh-CN": "通用 JSON 编辑"
},
"OK": {
"ms-MY": "OK",
"us-EN": "OK",
"zh-CN": "确定"
},
"Please enter JSON:": {
"ms-MY": "Sila masukkan JSON:",
"us-EN": "Please enter JSON:",
"zh-CN": "请输入 JSON:"
},
"Warning": {
"ms-MY": "Amaran",
"us-EN": "Warning",
"zh-CN": "警告"
},
"JSON content cannot be empty": {
"ms-MY": "Kandungan JSON tidak boleh kosong",
"us-EN": "JSON content cannot be empty",
"zh-CN": "JSON 内容不能为空"
},
"JSON content is too large and may cause a crash": {
"ms-MY": "Kandungan JSON terlalu besar dan mungkin menyebabkan kerosakan",
"us-EN": "JSON content is too large and may cause a crash",
"zh-CN": "JSON 内容过大,可能导致崩溃"
},
"Parse Error": {
"ms-MY": "Ralat Parse",
"us-EN": "Parse Error",
"zh-CN": "解析错误"
},
"JSON parse failed:\n%1": {
"ms-MY": "Parse JSON gagal:\\n%1",
"us-EN": "JSON parse failed:\\n%1",
"zh-CN": "JSON 解析失败:\\n%1"
},
"Integer number control type mismatch": {
"ms-MY": "Jenis kawalan nombor integer tidak sepadan",
"us-EN": "Integer number control type mismatch",
"zh-CN": "数字控件INT类型错误"
},
"Enter an integer value": {
"ms-MY": "Masukkan nilai integer",
"us-EN": "Enter an integer value",
"zh-CN": "输入数字值(整数)"
},
"Enter a decimal value": {
"ms-MY": "Masukkan nilai perpuluhan",
"us-EN": "Enter a decimal value",
"zh-CN": "输入数字值(小数)"
}
}
}