2025-12-27 09:34:02 +08:00

69 lines
2.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef DEVICESTATUSWIDGET_H
#define DEVICESTATUSWIDGET_H
#include <QWidget>
#include <QLabel>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QMap>
#include <QString>
#include <QMouseEvent>
#include <QPixmap>
#include "IWheelMeasureStatus.h"
// 每行显示的设备数量
const int DEVICES_PER_ROW = 4;
// 设备显示信息结构体用于UI显示
struct WheelDeviceDisplayInfo {
QString name;
QString alias;
QString ip;
DeviceStatus status;
bool isNetworkDevice;
float temperature;
bool hasTemperature;
WheelDeviceDisplayInfo() : status(DeviceStatus::Offline), isNetworkDevice(false), temperature(0.0f), hasTemperature(false) {}
WheelDeviceDisplayInfo(const QString& n, const QString& a, const QString& i, DeviceStatus s, bool network)
: name(n), alias(a), ip(i), status(s), isNetworkDevice(network), temperature(0.0f), hasTemperature(false) {}
};
class DeviceStatusWidget : public QWidget {
Q_OBJECT
public:
explicit DeviceStatusWidget(QWidget* parent = nullptr);
~DeviceStatusWidget();
void setDevices(const QList<WheelDeviceDisplayInfo>& devices);
void updateDeviceStatus(const QString& deviceName, DeviceStatus status);
void updateDeviceTemperature(const QString& deviceName, float temperature);
int deviceCount() const { return m_deviceLabels.size(); }
signals:
void deviceClicked(const QString& deviceName);
void deviceStatusChanged(const QString& deviceName, DeviceStatus status);
protected:
bool eventFilter(QObject* obj, QEvent* event) override;
private slots:
void onDeviceLabelClicked();
private:
void createDeviceLabels(int count);
void removeDeviceLabels();
void updateDeviceLabel(int index);
QString getStatusImage(DeviceStatus status) const;
QList<WheelDeviceDisplayInfo> m_devices;
QList<QWidget*> m_deviceLabels;
QList<QLabel*> m_statusLabels;
QList<QLabel*> m_nameLabels;
QList<QLabel*> m_temperatureLabels;
QGridLayout* m_gridLayout;
};
#endif // DEVICESTATUSWIDGET_H