diff --git a/app/src/ui/logic_editor_widget.cpp b/app/src/ui/logic_editor_widget.cpp index 91d58b9..d77f0e7 100644 --- a/app/src/ui/logic_editor_widget.cpp +++ b/app/src/ui/logic_editor_widget.cpp @@ -963,7 +963,7 @@ void LogicEditorWidget::reloadLogic() measureExpression(*rung.condition).columns); } } - const int grid_columns = std::max(kMinimumLogicColumns, condition_columns + 2); + const int grid_columns = std::max(kMinimumLogicColumns, condition_columns + 1); const qreal left_rail_x = kSceneMargin + kRailInset; const qreal right_rail_x = left_rail_x + static_cast(grid_columns) * kCellWidth; const qreal scene_width = std::max(kMinimumSceneWidth, right_rail_x + kSceneMargin); @@ -1016,7 +1016,7 @@ void LogicEditorWidget::reloadLogic() addPlaceholder( *scene_, QRectF(left_rail_x, grid_top, kCellWidth, kCellHeight), - tr("添加条件")); + rung.output.has_value() ? tr("无条件") : tr("添加条件")); } const bool rung_active = runtime_trace_enabled_ && traceValue( diff --git a/app/src/ui/logic_instruction_dialog.cpp b/app/src/ui/logic_instruction_dialog.cpp index 6e950e2..7073f83 100644 --- a/app/src/ui/logic_instruction_dialog.cpp +++ b/app/src/ui/logic_instruction_dialog.cpp @@ -165,7 +165,8 @@ void LogicInstructionDialog::updateOperandRanges() spin->setPrefix(register_operand ? QStringLiteral("D") : QString{}); spin->setMinimum(register_operand ? RegisterAddress::kMinimumIndex - : std::numeric_limits::min()); + : (combo->objectName() == QStringLiteral("counterPresetKindComboBox") + ? 0 : std::numeric_limits::min())); spin->setMaximum(register_operand ? RegisterAddress::kMaximumIndex : std::numeric_limits::max()); diff --git a/app/src/ui/main_window.cpp b/app/src/ui/main_window.cpp index 30590c8..042e816 100644 --- a/app/src/ui/main_window.cpp +++ b/app/src/ui/main_window.cpp @@ -23,6 +23,8 @@ #include "services/register_comment_service.h" #include "ui_main_window.h" +#include "domain/project_limits.h" + #include #include #include @@ -851,8 +853,7 @@ void MainWindow::configureRuntimeMonitor() }, [this](const QString &message) { - ui_->outputList->addItem(message); - ui_->outputList->scrollToBottom(); + appendOutputMessage(message); }); runtime_panel_controller_->configure(); runtime_monitor_widget_ = runtime_panel_controller_->runtimeMonitorWidget(); @@ -1467,14 +1468,23 @@ void MainWindow::showProjectResult( { const QString output = action + QStringLiteral(": ") + message; statusBar()->showMessage(output, 5000); - ui_->outputList->addItem(output); - ui_->outputList->scrollToBottom(); + appendOutputMessage(output); if (!succeeded) { QMessageBox::warning(this, action, message); } } +void MainWindow::appendOutputMessage(const QString &message) +{ + while (ui_->outputList->count() >= ProjectLimits::kMaximumOutputMessages) + { + delete ui_->outputList->takeItem(0); + } + ui_->outputList->addItem(message); + ui_->outputList->scrollToBottom(); +} + void MainWindow::requestMode(ApplicationMode requested_mode) { // UI 仅转发模式意图,合法性由服务层和领域状态机决定 @@ -1662,8 +1672,7 @@ void MainWindow::updateModeUi(const QString &message) && ui_->outputList->item(ui_->outputList->count() - 1)->text() == message; if (!duplicate) { - ui_->outputList->addItem(message); - ui_->outputList->scrollToBottom(); + appendOutputMessage(message); } } diff --git a/app/src/ui/main_window.h b/app/src/ui/main_window.h index a44c608..611e5d3 100644 --- a/app/src/ui/main_window.h +++ b/app/src/ui/main_window.h @@ -162,6 +162,7 @@ private: void loadProject(); // 在状态栏和输出面板显示工程操作结果 void showProjectResult(const QString &action, const QString &message, bool succeeded); + void appendOutputMessage(const QString &message); /** * @brief 请求服务层切换模式并同步界面状态 diff --git a/app/src/ui/main_window.ui b/app/src/ui/main_window.ui index 4e92146..0eb60d0 100644 --- a/app/src/ui/main_window.ui +++ b/app/src/ui/main_window.ui @@ -498,7 +498,7 @@ - 4000 + 8192 @@ -512,7 +512,7 @@ - 4000 + 8192 @@ -529,7 +529,7 @@ 1 - 4000 + 8192 @@ -546,7 +546,7 @@ 1 - 4000 + 8192 diff --git a/app/src/ui/plc_connection_dialog.ui b/app/src/ui/plc_connection_dialog.ui index 0396983..4fddecd 100644 --- a/app/src/ui/plc_connection_dialog.ui +++ b/app/src/ui/plc_connection_dialog.ui @@ -65,7 +65,7 @@ 响应超时 ms100300001001000 失败重试 - 102 + 52 轮询周期 ms501000050200 diff --git a/app/tests/main_window_tests.cpp b/app/tests/main_window_tests.cpp index 364db30..7c79a8e 100644 --- a/app/tests/main_window_tests.cpp +++ b/app/tests/main_window_tests.cpp @@ -84,7 +84,11 @@ public: notifyStateChanged(); } - void setPollAddresses(const std::vector &) override {} + PlcCommunicationResult setPollAddresses( + const std::vector &) override + { + return {true, {}}; + } PlcConnectionState state() const override { return connection_state; } bool initialReadCompleted() const override { return false; } PlcCommunicationError lastErrorType() const override @@ -149,9 +153,11 @@ public: } } - void setPollAddresses(const std::vector &addresses) override + PlcCommunicationResult setPollAddresses( + const std::vector &addresses) override { poll_addresses = addresses; + return {true, {}}; } PlcConnectionState state() const override { return connection_state; }