#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include #include #include #include #include #include #include class ColoredSquare : 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 : 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 writeRegister(int index); void readRegisters(); void loadConfiguration(); 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; QModbusTcpClient* m_modbusClient; QPushButton* m_connectButton; bool m_connected; int m_responseTimeout; int m_connectTimeout; int m_pollInterval; QTimer* m_pollTimer; }; #endif // MAINWINDOW_H