解决的问题:
做上位机时,多有检测仪器状态,事实显示警告,错误等状态,笔者就是需要显示各种仪器状态,做显示,后做出处理逻辑
Axure设计图:
需求:更新状态,根据状态值给出处理逻辑,主要看界面;具体业务代码具体实现
如何实现:
实现方式:QWidget中进行布局, QLabel控件进行画图等,实现的组件单独效果如下
可以进行复用,所以暂且叫它:WarningComponent
代码块解析:
.h文件:
/*********************************************************************************
*Author:zhouFuLiang
*Date: 2023-08-03 11:51
*Description: 警告组件界面
**********************************************************************************/
#ifndef WARNINGCOMPONENT_H
#define WARNINGCOMPONENT_H#include <QWidget>
#include <QLabel>class WarningComponent : public QWidget
{Q_OBJECTpublic:WarningComponent(const QString &strTitle, const QString &strImgPath, QWidget *parent = 0);~WarningComponent();/** @brief 设置当前状态* @param str 状态* @param 唯一对外的接口* @return*/void setCurrentState(const QString &str);
protected:void paintEvent(QPaintEvent *event);private:void initObject();void initGeometry();void initConnect();private:QWidget *m_pTitleWidget;QLabel *m_pTitleLabel;QLabel *m_pImageLabel;QLabel *m_pStateLabel;QString m_strTitle;QString m_strImgPath;
};#endif // WARNINGCOMPONENT_H
.cpp文件
#include "warningcomponent.h"
#include "public.h"WarningComponent::WarningComponent(const QString &strTitle, const QString &strImgPath, QWidget *parent): QWidget(parent),m_strTitle(strTitle),m_strImgPath(strImgPath)
{initObject();initGeometry();initConnect();
}WarningComponent::~WarningComponent()
{}void WarningComponent::setCurrentState(const QString &str)
{m_pStateLabel->setText(str);
}void WarningComponent::paintEvent(QPaintEvent *event)
{QPainter painter(this);// painter.setRenderHint(QPainter::Antialiasing); // 反锯齿;// painter.setBrush(QBrush(QColor(153, 204, 204)));// painter.setPen(Qt::transparent);QRect rect = this->rect();rect.setWidth(rect.width() - 1);rect.setHeight(rect.height() - 1);painter.drawRoundedRect(rect, 15, 15);QWidget::paintEvent(event);
}void WarningComponent::initObject()
{this->setWindowFlags(Qt::FramelessWindowHint);m_pTitleWidget = new QWidget(this);m_pTitleLabel = new QLabel(m_strTitle, m_pTitleWidget);m_pTitleLabel->setStyleSheet("QLabel{color:white;}");m_pTitleWidget->setStyleSheet("background-color:#717E98; border-top-left-radius:5px; border-top-right-radius:5px;");m_pImageLabel = new QLabel(this);m_pImageLabel->setPixmap(QPixmap(m_strImgPath));m_pImageLabel->resize(100,200);
// m_pImageLabel->setScaledContents(true);m_pStateLabel = new QLabel("State...", this);
}void WarningComponent::initGeometry()
{QVBoxLayout *layout1 = new QVBoxLayout;layout1->addWidget(m_pTitleLabel);m_pTitleWidget->setLayout(layout1);QVBoxLayout *vLayout = new QVBoxLayout;vLayout->addWidget(new QLabel(QString::fromLocal8Bit("当前状态"), this), 0, Qt::AlignLeft);vLayout->addSpacing(30);vLayout->addWidget(m_pStateLabel, 0, Qt::AlignCenter);QHBoxLayout *hLayout = new QHBoxLayout;hLayout->addWidget(m_pImageLabel);hLayout->addLayout(vLayout);QVBoxLayout *layout = new QVBoxLayout;layout->addWidget(m_pTitleWidget);layout->addStretch();layout->addSpacing(10);layout->addLayout(hLayout);layout->addStretch();this->setLayout(layout);
}void WarningComponent::initConnect()
{}