SwitchCardWidget::SwitchCardWidget(QSharedPointer<EntityControl> model,
QWidget *parent)
: WidgetBase(model, parent) {
this->switchCard_ = model.dynamicCast<EntitySwitchCard>();
WidgetBase::setSize();
m_gridLayout = new QGridLayout(this);
m_gridLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
// 元素间距
m_gridLayout->setSpacing(0);
m_gridLayout->setContentsMargins(5, 5, 5, 5);
// 图标
iconLabel = new QLabel(this);
int fontId = QFontDatabase::addApplicationFont(
QStringLiteral(":/font/icon.ttf")); // 加入字体,并获取字体ID
QString fontName =
QFontDatabase::applicationFontFamilies(fontId).at(0); // 获取字体名称
QFont iconFont = QFont(fontName);
iconFont.setPixelSize(switchCard_->getIconSize()); // 设置字体
iconLabel->setFont(iconFont); // 设置Label的字体
iconLabel->setStyleSheet(
QString("color:%1").arg(switchCard_->getIconColor()));
iconLabel->setText(
QChar((QString("0x%1").arg(switchCard_->getIcon())).toInt(nullptr, 16)));
// 主次文本
m_VLayout = new QVBoxLayout();
// 主文本
mainStr = new QLabel(this);
loadTextFont(mainStr, true);
mainStr->setText(switchCard_->getText());
// 次文本
desStr = new QLabel(this);
loadTextFont(desStr, false);
desStr->setText("开关");
// 开关
switchButton = new ToggleSwitchWidget(
this, 88, 44, switchCard_->getBrackgroupStr(),
switchCard_->getHighColor(), switchCard_->getIconBrackgroupStr());
// 隐藏组件,但占用布局
QGraphicsOpacityEffect *effect = new QGraphicsOpacityEffect;
effect->setOpacity(0.0); // 完全透明
if (switchCard_->getTheme() == 0) {
mainStr->setAlignment(Qt::AlignLeft | Qt::AlignBottom);
desStr->setAlignment(Qt::AlignLeft | Qt::AlignTop);
m_VLayout->addWidget(mainStr, 0);
m_VLayout->addWidget(desStr, 1);
m_gridLayout->addWidget(iconLabel, 0, 0, Qt::AlignLeft);
m_gridLayout->addLayout(m_VLayout, 0, 1, 1, 6, Qt::AlignLeft);
m_gridLayout->addWidget(switchButton, 0, 7, Qt::AlignCenter);
} else if (switchCard_->getTheme() == 1) {
mainStr->setAlignment(Qt::AlignLeft | Qt::AlignTop);
desStr->setAlignment(Qt::AlignLeft | Qt::AlignBottom);
m_gridLayout->addWidget(mainStr, 0, 0, 1, 3);
m_gridLayout->addWidget(iconLabel, 1, 0, 1, 3, Qt::AlignCenter);
m_gridLayout->addWidget(desStr, 2, 0, 1, 2);
m_gridLayout->addWidget(switchButton, 2, 2, 1, 1,
Qt::AlignRight | Qt::AlignBottom);
} else {
iconLabel->setStyleSheet(
QString("background-color:%1").arg(switchCard_->getIconColor()));
mainStr->setAlignment(Qt::AlignHCenter | Qt::AlignBottom);
desStr->setAlignment(Qt::AlignHCenter | Qt::AlignTop);
m_VLayout->addWidget(mainStr, 0, Qt::AlignHCenter | Qt::AlignBottom);
m_VLayout->addWidget(desStr, 1, Qt::AlignHCenter | Qt::AlignTop);
m_gridLayout->addWidget(iconLabel, 0, 0, 4, 1,
Qt::AlignHCenter | Qt::AlignBottom);
m_gridLayout->addLayout(m_VLayout, 4, 0, 2, 1, Qt::AlignCenter);
m_gridLayout->addWidget(switchButton, 6, 0, 2, 1,
Qt::AlignHCenter | Qt::AlignTop);
}
// 设置背景颜色,圆角
QString styleSheet = QString("background-color: %1; "
"border-radius: %2px; "
"border: 1px solid %3; ")
.arg(switchCard_->getBrackgroupStr())
.arg(switchCard_->getRadius())
.arg(switchCard_->getBrackgroupStr());
// 强制重新绘制
//this->setAttribute(Qt::WA_StyledBackground);
this->setStyleSheet(styleSheet);
connect(switchButton, &ToggleSwitchWidget::toggled, this,
&SwitchCardWidget::onSwitchOn);
}iconLabel圆形背景