#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include #include #include #include #include #include #include class ColoredSquare final : public QWidget { Q_OBJECT public: explicit ColoredSquare(QWidget *parent = nullptr); void setColor(const QColor& color); protected: void paintEvent(QPaintEvent *event) override; private: QColor m_color; }; class MainWindows final : public QWidget { Q_OBJECT public: explicit MainWindows(QWidget *parent = nullptr); ~MainWindows() override; private slots: void onStateChanged(QModbusDevice::State state); void onConnectButtonClicked(); void onReadReady(); void onPollTimer(); private: void createUIElements(); void initModbusConnection(); void readRegisters(); void loadConfiguration(); void updateStatusBar() const; // Добавлен const QTableWidget* m_table{}; QString m_ipAddress; int m_port{}; QVector m_buttonRegisters; QVector m_indicatorRegisters; int m_buttonCount{}; int m_indicatorCount{}; QVector m_buttons; QVector m_squares; QVector m_colorIndices; QVector m_buttonValues; // Add this new member to store button states QVector m_buttonBits; // Add this new member for button bits QVector m_buttonLabels; QModbusTcpClient* m_modbusClient; QPushButton* m_connectButton{}; bool m_connected; int m_responseTimeout{}; int m_connectTimeout{}; int m_pollInterval{}; QTimer* m_pollTimer{}; QLabel* m_statusLabel{}; int m_requestCounter; int m_responseCounter; bool m_disconnectRequested{false}; }; #endif // MAINWINDOW_H