From 868b770e0ec5d4ecd65862f56684b835b011ff78 Mon Sep 17 00:00:00 2001 From: Alekseev Date: Fri, 4 Jul 2025 03:34:30 +0700 Subject: [PATCH] refactor --- Inc/mainwindow.h | 2 +- Src/mainwindow.cpp | 39 +++++++++++++++++++++------------------ 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/Inc/mainwindow.h b/Inc/mainwindow.h index dd70578..afe074d 100644 --- a/Inc/mainwindow.h +++ b/Inc/mainwindow.h @@ -43,6 +43,7 @@ private: void initModbusConnection(); void readRegisters(); void loadConfiguration(); + void updateStatusBar() const; // Добавлен const QTableWidget* m_table{}; QString m_ipAddress; @@ -69,7 +70,6 @@ private: QLabel* m_statusLabel{}; int m_requestCounter; int m_responseCounter; - void updateStatusBar(); }; #endif // MAINWINDOW_H diff --git a/Src/mainwindow.cpp b/Src/mainwindow.cpp index 6076754..438bb5d 100644 --- a/Src/mainwindow.cpp +++ b/Src/mainwindow.cpp @@ -5,13 +5,10 @@ #include #include #include -#include "mainwindow.h" -#include -#include -#include -#include #include #include +#include "mainwindow.h" +#include ColoredSquare::ColoredSquare(QWidget *parent) : QWidget(parent), m_color(Qt::gray) { } @@ -117,6 +114,8 @@ void MainWindows::loadConfiguration() { } void MainWindows::initModbusConnection() { + delete m_modbusClient; + m_modbusClient = new QModbusTcpClient(this); // Set timeouts @@ -125,11 +124,13 @@ void MainWindows::initModbusConnection() { m_modbusClient->setTimeout(m_responseTimeout); m_modbusClient->setNumberOfRetries(1); - connect(m_modbusClient, &QModbusClient::stateChanged, + connect(m_modbusClient, &QModbusDevice::stateChanged, this, &MainWindows::onStateChanged); // Initialize poll timer - m_pollTimer = new QTimer(this); + if (!m_pollTimer) { + m_pollTimer = new QTimer(this); + } m_pollTimer->setInterval(m_pollInterval); connect(m_pollTimer, &QTimer::timeout, this, &MainWindows::onPollTimer); } @@ -213,13 +214,15 @@ void MainWindows::readRegisters() { } void MainWindows::onReadReady() { - auto reply = qobject_cast(sender()); + auto* reply = qobject_cast(sender()); if (!reply) return; - if (reply->error() == QModbusDevice::NoError) { + std::unique_ptr replyPtr(reply); // Автоматическое освобождение памяти + + if (replyPtr->error() == QModbusDevice::NoError) { m_responseCounter++; updateStatusBar(); - const QModbusDataUnit unit = reply->result(); + const QModbusDataUnit unit = replyPtr->result(); int address = unit.startAddress(); int value = unit.value(0); @@ -257,7 +260,6 @@ void MainWindows::onReadReady() { } } } - reply->deleteLater(); } void MainWindows::createUIElements() { @@ -302,21 +304,22 @@ void MainWindows::createUIElements() { if (i < m_buttonCount) { auto* button = new QPushButton(QString("Register %1 Bit %2").arg(m_buttonRegisters[i]).arg(m_buttonBits[i]), this); button->setFont(tableFont); - button->setCheckable(true); // Делаем кнопку переключаемой + button->setCheckable(true); m_buttons.append(button); m_buttonValues.append(0); m_table->setCellWidget(i, 1, button); - connect(button, &QPushButton::clicked, [this, i]() { + connect(button, &QPushButton::clicked, this, [this, i]() { QModbusDataUnit writeUnit(QModbusDataUnit::HoldingRegisters, m_buttonRegisters[i], 1); int currentValue = m_buttonValues[i]; - int newValue = currentValue ^ (1 << m_buttonBits[i]); // Toggle specific bit + int newValue = currentValue ^ (1 << m_buttonBits[i]); m_buttonValues[i] = newValue; writeUnit.setValue(0, newValue); - if (auto *reply = m_modbusClient->sendWriteRequest(writeUnit, 1)) { - if (!reply->isFinished()) + if (auto* reply = m_modbusClient->sendWriteRequest(writeUnit, 1)) { + if (!reply->isFinished()) { connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - else + } else { delete reply; + } } }); } @@ -357,7 +360,7 @@ void MainWindows::createUIElements() { setFixedSize(totalWidth, totalHeight); } -void MainWindows::updateStatusBar() { +void MainWindows::updateStatusBar() const { QString status = QString("IP: %1 Port: %2 | Requests: %3 Responses: %4") .arg(m_ipAddress) .arg(m_port)