#include "sensorwidget.h" #include SensorWidget::SensorWidget(QWidget *parent, const Sensor &sensor) : QFrame(parent) , sensor(sensor) , titleLabel(new QLabel(this)) , valueLabel(new QLabel(this)) , incidentLabel(new QLabel(this)) , layout(new QVBoxLayout(this)) { setFrameStyle(QFrame::Box); setLineWidth(1); setFixedSize(250, 200); layout->addWidget(titleLabel); layout->addWidget(valueLabel); layout->addWidget(incidentLabel); setErrorState(); QString titleText = sensor.name; if (titleText.length() > 40) { titleText = titleText.left(37) + "..."; } titleLabel->setText(titleText); titleLabel->setWordWrap(true); titleLabel->setMinimumHeight(100); titleLabel->setAlignment(Qt::AlignTop | Qt::AlignLeft); if (sensor.isBooled) { valueLabel->setText(sensor.lastValue != 0 ? "Да" : "Нет"); } else { valueLabel->setText(QString::number(sensor.lastValue) + ' ' + sensor.unitName); incidentLabel->setText(QString::number(sensor.alarmLowerBound) + "-" + QString::number(sensor.alarmUpperBound)); } layout->setContentsMargins(10, 10, 10, 10); layout->setSpacing(5); setLayout(layout); } void SensorWidget::mousePressEvent(QMouseEvent *event) { emit clicked(this); // Генерация сигнала о клике QFrame::mousePressEvent(event); } void SensorWidget::setErrorState() { if (sensor.isAlarmEnabled) { setStyleSheet("QFrame { border: 2px solid #FF453A; border-radius: 10px; background: " "rgba(255, 69, 58, 0.25);}"); titleLabel->setStyleSheet("font-family: Inter;" "font-size: 24px;" "font-weight: 400;" "line-height: 29.05px;" "text-align: left;" "color: #13385F;" "border: 0;" "background: transparent;"); valueLabel->setStyleSheet("font-family: Inter;" "font-size: 24px;" "font-weight: 400;" "line-height: 29.05px;" "text-align: left;" "color: #FF453A;" "border: 0;" "background: transparent;"); incidentLabel->setStyleSheet("font-family: Inter;" "font-size: 24px;" "font-weight: 400;" "line-height: 29.05px;" "text-align: left;" "color: #13385F;" "border: 0;" "background: transparent;"); } else { setStyleSheet("QFrame { border: 2px solid rgba(229, 231, 235, 0.70);; border-radius: 10px; " "background: rgba(255, 255, 255, 0.70)}"); titleLabel->setStyleSheet("font-family: Inter;" "font-size: 24px;" "font-weight: 400;" "line-height: 29.05px;" "text-align: left;" "color: #13385F;" "border: 0;" "background: transparent;"); valueLabel->setStyleSheet("font-family: Inter;" "font-size: 24px;" "font-weight: 400;" "line-height: 29.05px;" "text-align: left;" "color: #13385F;" "border: 0;" "background: transparent;"); incidentLabel->setStyleSheet("font-family: Inter;" "font-size: 24px;" "font-weight: 400;" "line-height: 29.05px;" "text-align: left;" "color: rgba(19, 56, 95, 0.5);" "border: 0;" "background: transparent;"); } } Sensor SensorWidget::getSensor() const { return sensor; } void SensorWidget::setSensor(const Sensor value) { sensor = value; QString titleText = sensor.name; if (titleText.length() > 40) { titleText = titleText.left(37) + "..."; } titleLabel->setText(titleText); if (sensor.isBooled) { valueLabel->setText(sensor.lastValue != 0 ? "Да" : "Нет"); incidentLabel->hide(); } else { valueLabel->setText(QString::number(sensor.lastValue) + ' ' + sensor.unitName); incidentLabel->show(); incidentLabel->setText(QString::number(sensor.alarmLowerBound) + "-" + QString::number(sensor.alarmUpperBound)); } }