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

}
相关推荐
剩下了什么8 小时前
float32 与 float64 精度陷阱:如何在 Go 中避免错误使用
开发语言·后端·golang
指尖时光.8 小时前
Three.js 超全入门综合案例
开发语言·javascript·ecmascript
暴力求解8 小时前
Linux网络---传输层协议TCP(二)
linux·服务器·开发语言·网络·tcp/ip
吴声子夜歌8 小时前
Java面试题——基础(一)
java·开发语言
小庞在加油9 小时前
WinDbg实战:QT/跨平台项目死锁与无响应问题排查指南
开发语言·qt·windbg·工具
Vae_Mars9 小时前
C#中的delegate委托
开发语言·c#
一直走下去-明10 小时前
简单的http抓包解包完整代码
开发语言·python
caimouse10 小时前
ReactOS 图形系统分析(51):元文件子系统 — metafile.c
c语言·开发语言
hy.z_77711 小时前
【QT】1.QT初识(背景介绍、搭建开发环境、Qt Creator、程序、项目文件解析、编程注意事项)
qt
学习星球11 小时前
Solid.js 实战:拆解官方 RealWorld 项目
开发语言·javascript·vue.js