#include "warning.h" #include "ui_warning.h" #include #include #include #include "spdlog/spdlog.h" #include "oneshadow.h" Warning::Warning(QWidget *parent) : QDialog(parent), ui(new Ui::Warning) { ui->setupUi(this); /* 设置无边框和背景透明 */ this->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint); this->setAttribute(Qt::WA_TranslucentBackground); /* 设置文字自动换行 */ ui->label_Warn->setWordWrap(true); /* 设置文本居中 */ // ui->label_Warn->setAlignment(Qt::AlignCenter); ui->label_Warn->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); /* 加载警告图标 */ ui->label_warnIcon->setStyleSheet(R"(border-image: url(:/ESM-8C_ICON/Tip/Tips2x.png);)"); /* 阴影宽度是16 */ this->layout()->setMargin(SHADOW_W); m_shadow = new OneShadow(QSize(width() - SHADOW_W*2, height() - SHADOW_W*2),SHADOW_W); connect(ui->pBtn_close,SIGNAL(clicked()),this,SLOT(close())); connect(ui->pBtn_cancel,SIGNAL(clicked()),this,SLOT(close())); connect(ui->pBtn_ok,SIGNAL(clicked()),this,SLOT(do_ok())); } Warning::~Warning() { delete ui; } void Warning::setText(const QString &text) { /* 根据文本大小设置高度 */ ui->label_Warn->setText(text); /* 重新设置位置 */ resetLabelSize(); moveWarnICON(); } /* 只有一个确定按钮 */ void Warning::setTextWithOneButton(const QString &text) { ui->pBtn_cancel->hide(); // ui->pBtn_ok->move(ui->pBtn_cancel->x(),ui->pBtn_cancel->y()); ui->label_Warn->setText(text); /* 重新设置位置 */ resetLabelSize(); moveWarnICON(); } void Warning::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); /* 绘制阴影 */ painter.drawImage(QPoint(0,0),m_shadow->image()); } void Warning::do_ok() { emit signal_ok(); m_isOk = true; this->close(); } /** * @brief 重新设置显示文字的区域大小,主要是设置宽度,为计算出左侧的图标位置 * 字号是18,每个汉字的宽度、高度都是18,行高是27。 * 文字显示区域最大宽度是306,显示17个汉字。 * 阴影宽度是16,需要加上阴影宽度的坐标。 * */ void Warning::resetLabelSize() { int TextCount = ui->label_Warn->text().count(); int width = TextCount * 18; if(width > 306) { width = 306; } // ui->label_Warn->setFixedWidth(width); ui->label_Warn->resize(width, ui->label_Warn->height()); /* ui->widget是布局确定的大小,获取它的大小不准确 */ int widgetWidth = this->width(); int x = (widgetWidth - width) / 2; // int x = (widgetWidth - width - ui->label_warnIcon->width() - 12) / 2; // x = x + ui->label_warnIcon->width() + 12; /* 加上图标的宽度,和图标之间的间距 */ ui->label_Warn->move(x, ui->label_Warn->y()); } /* 移动警告图标 */ void Warning::moveWarnICON() { int x = ui->label_Warn->x() - ui->label_warnIcon->width() - 12; int y = ui->label_Warn->y() + ui->label_Warn->height() / 2 - ui->label_warnIcon->height() / 2; ui->label_warnIcon->move(x,y); }