Qt做警告处理界面

解决的问题:

做上位机时,多有检测仪器状态,事实显示警告,错误等状态,笔者就是需要显示各种仪器状态,做显示,后做出处理逻辑

Axure设计图:


需求:更新状态,根据状态值给出处理逻辑,主要看界面;具体业务代码具体实现

如何实现:

实现方式:QWidget中进行布局, QLabel控件进行画图等,实现的组件单独效果如下

可以进行复用,所以暂且叫它:WarningComponent


代码块解析:

.h文件:

cpp 复制代码
/*********************************************************************************
*Author:zhouFuLiang
*Date: 2023-08-03  11:51
*Description: 警告组件界面
**********************************************************************************/
#ifndef WARNINGCOMPONENT_H
#define WARNINGCOMPONENT_H

#include <QWidget>
#include <QLabel>

class WarningComponent : public QWidget
{
    Q_OBJECT

public:
    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文件

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()
{

}
相关推荐
阿里加多1 分钟前
第 5 章:Go 内存模型与 Happens-Before 原则
开发语言·后端·golang
网域小星球12 分钟前
C 语言从 0 入门(二十)|指针进阶:指针数组、数组指针与函数指针
c语言·开发语言·函数指针·数组指针·指针进阶
飞鼠_16 分钟前
详解c++中的sturct
开发语言·c++
小白学大数据21 分钟前
分布式爬虫核心技术详解与工程实践
开发语言·分布式·爬虫·python
CoderCodingNo24 分钟前
【GESP】C++一级真题 luogu-B4495, [GESP202603 一级] 交朋友
开发语言·c++
海寻山34 分钟前
Java内部类:4种类型+实战场景+面试避坑
java·开发语言·面试
梦游钓鱼40 分钟前
stl常用容器说明
开发语言·c++
踏着七彩祥云的小丑1 小时前
Python——字符串常用操作
开发语言·python
成都易yisdong1 小时前
基于C#和WMM2025模型的地磁参数计算器实现
开发语言·c#