Files
QT_wuhan_YT/widgets/datacard.cpp
T
2026-09-09 17:00:37 +08:00

92 lines
2.4 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.
#include "datacard.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include "global.h"
#include <QStyle>
DataCard::DataCard(const QString& title, QWidget* parent)
: QWidget(parent)
{
setProperty("card", true);
QVBoxLayout* lay = new QVBoxLayout(this);
lay->setContentsMargins(16, 0, 16, 14);
lay->setSpacing(8);
// 标题栏(高 44px)
m_title = new QLabel(title, this);
m_title->setFixedHeight(44);
m_title->setProperty("cardTitle", true);
m_title->setStyleSheet(QString("color:%1;font-size:24px;font-weight:700;border-bottom:1px solid %2;")
.arg(C::TEXT, C::BORDER));
lay->addWidget(m_title);
// 字段行容器
lay->addStretch(1);
}
void DataCard::setTitle(const QString& t)
{
m_title->setText(t);
}
int DataCard::addField(const QString& label, const QString& value, bool big)
{
int index = m_values.size();
QHBoxLayout* row = new QHBoxLayout();
row->setSpacing(8);
QLabel* lab = new QLabel(label + ":", this);
lab->setProperty("sub", true);
lab->setStyleSheet(QString("color:%1;font-size:22px;").arg(C::TEXT_SUB));
QLabel* val = new QLabel(value, this);
val->setStyleSheet(QString("color:%1;%2").arg(C::TEXT,
big ? "font-size:64px;font-weight:700;" : "font-size:30px;font-weight:700;"));
row->addWidget(lab);
row->addWidget(val, 1);
// 插入到标题栏之后(stretch 之前)
QVBoxLayout* lay = qobject_cast<QVBoxLayout*>(layout());
lay->insertLayout(lay->count() - 1, row);
m_values.append(val);
m_labels.append(label);
return index;
}
void DataCard::setField(int index, const QString& value)
{
if (index < 0 || index >= m_values.size())
return;
m_values[index]->setText(value);
}
void DataCard::setAlarm(int index, bool on)
{
if (index < 0 || index >= m_values.size())
return;
QLabel* val = m_values[index];
if (on) {
val->setProperty("alert", true);
startBlink(val, "blink");
} else {
stopBlink(val, "blink");
val->setProperty("alert", false);
val->style()->unpolish(val);
val->style()->polish(val);
}
}
void DataCard::setHighlight(bool on)
{
if (on)
setStyleSheet(QString("QWidget[card=\"true\"]{background-color:%1;border:3px solid %2;border-radius:12px;}")
.arg(C::PANEL, C::PRIMARY));
else
setStyleSheet(QString());
}