精华内容
下载资源
问答
  • Qt状态指示灯

    千次阅读 2020-06-22 23:46:12
    基于QWidget实现的状态指示灯

    前言

    emm… 懒得写描述了,直接看代码吧,或者先看看最后的效果图也行。
    人比较懒,注释也没写,那凑合看好了。有问题请留言交流,看到会及时回复😄

    聊聊代码

    fr_light.h

    #ifndef FRLIGHT_H
    #define FRLIGHT_H
    
    #include <qwidget.h>
    
    class FrLight : public QWidget {
      Q_OBJECT
    
    public:
      enum State {
        kDefault,
        kNormal,
        kWorking,
        kWarning,
        kMalfunction
      };
    
    public:
      explicit FrLight(QWidget *parent = nullptr);
    
      void set_state(const State& state);
    
      void set_default_color(const QColor& default_color);
      void set_normal_color(const QColor& normal_color);
      void set_working_color(const QColor& working_color);
      void set_warning_color(const QColor& warning_color);
      void set_malfunction_color(const QColor& malfunction_color);
    
    protected:
      void timerEvent(QTimerEvent *);
      void paintEvent(QPaintEvent *);
    
    private:
      int _step;
      int _timer_id;
    
      State _state;
      \
      QColor _default_color;
      QColor _normal_color;
      QColor _working_color;
      QColor _warning_color;
      QColor _malfunction_color;
    
    };
    
    #endif // FRLIGHT_H
    
    

    fr_light.cc

    #include "fr_light.h"
    
    #include <qpainter.h>
    #include <qbrush.h>
    
    FrLight::FrLight(QWidget *parent) :
      QWidget(parent),
      _step(60) ,
      _timer_id(0) ,
      _state(kWorking) ,
      _default_color(127, 127, 127) ,
      _normal_color(32, 255, 32) ,
      _working_color(32, 255, 32) ,
      _warning_color(255, 255, 32) ,
      _malfunction_color(255, 32, 32) {
      update();
    }
    
    void FrLight::set_state(const FrLight::State& state) {
      _state = state;
      if (kWorking == _state) {
        _timer_id = startTimer(16);
      } else {
        killTimer(_timer_id);
        _timer_id = 0;
      }
      update();
    }
    
    void FrLight::set_default_color(const QColor& default_color) {
      _default_color = default_color;
      update();
    }
    
    void FrLight::set_normal_color(const QColor& normal_color) {
      _normal_color = normal_color;
      update();
    }
    
    void FrLight::set_working_color(const QColor& working_color) {
      _working_color = working_color;
      update();
    }
    
    void FrLight::set_warning_color(const QColor& warning_color) {
      _warning_color = warning_color;
      update();
    }
    
    void FrLight::set_malfunction_color(const QColor& malfunction_color) {
      _malfunction_color = malfunction_color;
      update();
    }
    
    void FrLight::timerEvent(QTimerEvent*) {
      update();
    
      --_step;
      if (_step == -60) {
        _step = 60;
      }
    }
    
    void FrLight::paintEvent(QPaintEvent*) {
      int side = qMin(width(), height());
    
       QPainter painter(this);
       painter.setRenderHint(QPainter::Antialiasing, true);
       painter.translate(width() / 2, height() / 2);
       painter.scale(side / 100.0, side / 100.0);
    
    
       QColor start_color, mid_color, end_color;
    
       switch (_state) {
         case kDefault:
           start_color = _default_color;
           mid_color = _default_color;
           end_color = _default_color;
           mid_color.setAlpha(192);
           end_color.setAlpha(0);
           break;
         case kNormal:
           start_color = _normal_color;
           mid_color = _normal_color;
           end_color = _normal_color;
           mid_color.setAlpha(192);
           end_color.setAlpha(0);
           break;
         case kWorking:
           if (0 == _timer_id) {
             _timer_id = startTimer(16);
           }
           start_color = _working_color;
           mid_color = _working_color;
           end_color = _working_color;
           start_color.setAlpha(qAbs(int(_step * 4.25)));
           mid_color.setAlpha(qAbs(int(_step * 3.2)));
           end_color.setAlpha(0);
           break;
         case kWarning:
           start_color = _warning_color;
           mid_color = _warning_color;
           end_color = _warning_color;
           mid_color.setAlpha(192);
           end_color.setAlpha(0);
           break;
         case kMalfunction:
           start_color = _malfunction_color;
           mid_color = _malfunction_color;
           end_color = _malfunction_color;
           mid_color.setAlpha(192);
           end_color.setAlpha(0);
           break;
         default:
           start_color = _default_color;
           mid_color = _default_color;
           end_color = _default_color;
           mid_color.setAlpha(192);
           end_color.setAlpha(0);
           break;
       }
    
       QRadialGradient radial(0, 0, 50, 0, 0);    //设置圆的原点和焦点在中心,半径50
       radial.setSpread(QGradient::PadSpread);
       radial.setColorAt(0, start_color);
       radial.setColorAt(0.9, mid_color);
       radial.setColorAt(1, end_color);
    
       painter.setPen(Qt::transparent);
       painter.setBrush(radial);
       painter.drawEllipse(-50, -50, 100, 100);
    }
    
    

    效果图

    在这里插入图片描述

    展开全文
  • qt实现的简易状态指示灯,灯的状态可闪烁,通过重载paintEvent来实现,可以通过自己定义状态指示变量来控制状态指示的状态。给出了qt4下实现的工程文件,可直接运行,定义了两个状态指示,大家可以根据自己的需要...
  • qt 指示灯 状态灯 红绿灯 LED灯:使用QLabel实现

    千次阅读 热门讨论 2021-02-01 15:19:49
    需要在界面上实时显示设备的状态,希望通过指示灯来显示,例如绿色代表正常,红色代表异常。 实现步骤 首先添加几个QLabel控件,下图添加了四个QLabel控件。对于QLabel,双击可以修改其text,在属性栏可以修改其...

    前言

    需要在界面上实时显示设备的状态,希望通过指示灯来显示,例如绿色代表正常,红色代表异常。

    实现步骤

    首先添加几个QLabel控件,下图添加了四个QLabel控件。对于QLabel,双击可以修改其text,在属性栏可以修改其objectName,修改led1、led2的objectName为label_led1、label_led2。
    在这里插入图片描述
    使用自定义函数setLED来实现LED灯。

    // 该函数将label控件变成一个圆形指示灯,需要指定颜色color以及直径size
    // color 0:grey 1:red 2:green 3:yellow
    // size  单位是像素
    setLED(QLabel* label, int color, int size)
    {
        // 将label中的文字清空
        label->setText("");
        // 先设置矩形大小
        // 如果ui界面设置的label大小比最小宽度和高度小,矩形将被设置为最小宽度和最小高度;
        // 如果ui界面设置的label大小比最小宽度和高度大,矩形将被设置为最大宽度和最大高度;
        QString min_width = QString("min-width: %1px;").arg(size);              // 最小宽度:size
        QString min_height = QString("min-height: %1px;").arg(size);            // 最小高度:size
        QString max_width = QString("max-width: %1px;").arg(size);              // 最小宽度:size
        QString max_height = QString("max-height: %1px;").arg(size);            // 最小高度:size
        // 再设置边界形状及边框
        QString border_radius = QString("border-radius: %1px;").arg(size/2);    // 边框是圆角,半径为size/2
        QString border = QString("border:1px solid black;");                    // 边框为1px黑色
        // 最后设置背景颜色
        QString background = "background-color:";
        switch (color) {
        case 0:
            // 灰色
            background += "rgb(190,190,190)";
            break;
        case 1:
            // 红色
            background += "rgb(255,0,0)";
            break;
        case 2:
            // 绿色
            background += "rgb(0,255,0)";
            break;
        case 3:
            // 黄色
            background += "rgb(255,255,0)";
            break;
        default:
            break;
        }
    
        const QString SheetStyle = min_width + min_height + max_width + max_height + border_radius + border + background;
        label->setStyleSheet(SheetStyle);
    }
    

    在需要改变LED灯颜色的地方调用setLED即可。为了演示,我新建了MainWindow工程,在MainWindow类的构造函数中直接调用,运行程序时便会改变LED颜色。

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        setLED(ui->label_led1, 1, 16);
        setLED(ui->label_led2, 2, 16);
    }
    

    效果如下:
    在这里插入图片描述

    展开全文
  • 可以作为指示灯,可以随时切换黄灯、绿灯、红灯三种状态的。
  • qt指示灯

    千次阅读 2012-09-25 23:02:17
    用QWidget制作指示灯 下载http://download.csdn.net/detail/minghuiw/4597719
    用QWidget制作指示灯
    下载http://download.csdn.net/detail/minghuiw/4597719
    展开全文
  • 写上位机软件的时候,经常会用到指示灯控件,奈何Qt设计师提供的widget控件中没有指示灯,拖拖拖无计可施?那就自己画吧。painter画一个简单的指示灯,轮廓颜色和内部填充颜色搞定。 特点 1、内置几种常用的颜色,...

    前言

    写上位机软件的时候,经常会用到指示灯控件,奈何Qt设计师提供的widget控件中没有指示灯,拖拖拖无计可施?那就自己画吧。painter画一个简单的指示灯,轮廓颜色和内部填充颜色搞定。新建一个类,继承QWidget,带不带ui都行,我这里选择带ui了(代码中体现),重写paintEvent即可,其他的就是一些自己定义的接口了。
    在这里插入图片描述

    特点

    1、内置几种常用的颜色,红绿蓝黄白;
    2、提供自定义颜色接口,轮廓+内部填充;
    3、右键菜单自选颜色。

    代码

    colorfullamp.h

    #ifndef COLORFULLAMP_H
    #define COLORFULLAMP_H
    
    #include <QWidget>
    #include <QPainter>
    #include <QPainterPath>
    #include <QPen>
    #include <QBrush>
    #include <QColor>
    #include <QPoint>
    #include <QMouseEvent>
    #include <QMenu>
    #include <QColorDialog>
    
    QT_BEGIN_NAMESPACE
    namespace Ui { class ColorfulLamp; }
    QT_END_NAMESPACE
    
    class ColorfulLamp : public QWidget
    {
        Q_OBJECT
        //Q_PROPERTY(int lamp_type READ Lamp_type WRITE set_Lamp_type)
    
    public:
        ColorfulLamp(QWidget *parent = nullptr);
        ~ColorfulLamp();
    
        void red_lamp();
        void green_lamp();
        void blue_lamp();
        void yellow_lamp();
        void white_lamp();
        void custom_lamp(const QColor& border = QColor(Qt::white), const QBrush& inside = QBrush(Qt::black));
    
        void set_inside_color(const QColor& color);
        void set_border_color(const QColor& color);
        void set_pen_width(int width);
    
        QBrush get_inside_color();
        QColor get_border_color();
        int get_pen_width();
    
    protected:
        void paintEvent(QPaintEvent *);
        void mousePressEvent(QMouseEvent *);
    
    private:
        void select_inside_color();
        void select_border_color();
    private:
        Ui::ColorfulLamp *ui;
        QMenu* menu;
    
        QBrush inside_color;
        QColor border_color;
        int pen_width = 4;
    
    };
    #endif // COLORFULLAMP_H
    

    colorfullamp.cpp

    #if _MSC_VER >= 1600
    #pragma execution_character_set("utf-8")
    #endif
    
    #include "colorfullamp.h"
    #include "ui_colorfullamp.h"
    #include <QDebug>
    
    #define sys_out qDebug()
    
    ColorfulLamp::ColorfulLamp(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::ColorfulLamp)
    {
        ui->setupUi(this);
        setAttribute(Qt::WA_TranslucentBackground); //背景透明
        setWindowFlag(Qt::FramelessWindowHint); //设置无边框,背景才会透明,否则显示黑色
        menu = new QMenu(this);
    
        menu->addAction("红色", this, &ColorfulLamp::red_lamp);
        menu->addAction("绿色", this, &ColorfulLamp::green_lamp);
        menu->addAction("蓝色", this, &ColorfulLamp::blue_lamp);
        menu->addAction("黄色", this, &ColorfulLamp::yellow_lamp);
        menu->addAction("白色", this, &ColorfulLamp::white_lamp);
        menu->addAction("选择轮廓颜色", this, &ColorfulLamp::select_border_color);
        menu->addAction("选择指示灯颜色", this, &ColorfulLamp::select_inside_color);
    //    menu->addAction("关闭", [this]{close();});
    
        border_color = QColor(Qt::white);
        inside_color = QBrush(Qt::red);
    
    }
    
    ColorfulLamp::~ColorfulLamp()
    {
        delete ui;
    }
    
    void ColorfulLamp::paintEvent(QPaintEvent *event)
    {
        QPainter painter(this);
        painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);    //开启抗锯齿
    
        QPen pen;
        pen.setWidth(pen_width);    //轮廓线宽,默认4px
        pen.setColor(border_color);
        painter.setPen(pen);
    
        int cur_width = width();    //widget宽度
        int cur_height = height();  //widget高度
    
        QPoint center(cur_width/2, cur_height/2);   //圆心
        int radius = __min(cur_width, cur_height)/2 - pen_width/2;    //半径,取宽高的较小者
    
        painter.drawEllipse(center, radius, radius);    //画轮廓
    
        QPainterPath path;
        path.addEllipse(center, radius - pen_width/2, radius - pen_width/2);
        painter.fillPath(path, inside_color);   //填充圆
    }
    
    void ColorfulLamp::mousePressEvent(QMouseEvent *event)
    {
        if(event->button() == Qt::RightButton)
        {
            menu->exec(event->globalPos());
        }
    }
    
    void ColorfulLamp::set_inside_color(const QColor& color)
    {
        inside_color.setColor(color);
    }
    void ColorfulLamp::set_border_color(const QColor& color)
    {
        inside_color.setColor(color);
    }
    
    void ColorfulLamp::red_lamp()
    {
        inside_color.setColor(Qt::red);
        update();
    }
    void ColorfulLamp::green_lamp()
    {
        inside_color.setColor(Qt::green);
        update();
    }
    
    void ColorfulLamp::blue_lamp()
    {
        inside_color.setColor(Qt::blue);
        update();
    }
    
    void ColorfulLamp::yellow_lamp()
    {
        inside_color.setColor(Qt::yellow);
        update();
    }
    
    void ColorfulLamp::white_lamp()
    {
        inside_color.setColor(Qt::white);
        update();
    }
    
    void ColorfulLamp::custom_lamp(const QColor& border, const QBrush& inside)
    {
        border_color = border;
        inside_color = inside;
        update();
    }
    
    void ColorfulLamp::select_inside_color()
    {
        QColor selection = QColorDialog::getColor();
        if(selection.isValid())
        {
            inside_color.setColor(selection);
            update();
        }
    }
    void ColorfulLamp::select_border_color()
    {
        QColor selection = QColorDialog::getColor();
        if(selection.isValid())
        {
            border_color = selection;
            update();
        }
    }
    
    QBrush ColorfulLamp::get_inside_color()
    {
        return inside_color;
    }
    
    QColor ColorfulLamp::get_border_color()
    {
        return border_color;
    }
    
    void ColorfulLamp::set_pen_width(int width)
    {
        if(width > 0)
        {
            pen_width = width;
            update();
        }
    }
    int ColorfulLamp::get_pen_width()
    {
        return pen_width;
    }
    
    展开全文
  • qt5-led指示灯小工具 QT5的简单LED指示灯小部件 该存储库包含类和示例项目。 该类具有一些基本功能,并且易于使用。 该存储库有一个基本的示例应用程序,该应用程序使... 设置指示灯状态 void setState(bool state);
  • 模拟指示灯,目前两种颜色,红色和绿色。你可以下载下来Happy一下!
  • opencv_rk3399Pro 基于openCV QT 移远EC20 4G模块的简单的视觉处理系统(变电站控制室指示灯状态识别)
  • Qt设置PushButton的颜色当指示灯

    千次阅读 2019-05-27 18:27:19
    //红色-- Qt::red //绿色-- Qt::green QPalette pal = ui.pushButtonBitDisp->palette(); pal.setColor(QPalette::Button, Qt::red); ui.pushButtonBitDisp->setPalette(pal); ui.pushButtonBitDisp->...
  • 需要在界面上实时显示设备的状态,希望通过指示灯来显示,例如绿色代表正常,红色代表异常。 qt的实现方式见我的另一篇博文。 1. 添加资源文件 打开vs新建MFC工程,打开资源视图,如下图所示,添加资源。 导入图片...
  • QT 绘制状态灯 绘制状态灯首先需要绘制一个标签,绘制的直径要小于标签的尺寸。 enum{ GRAY = 0, RED = 1, GREEN = 2, YELLOW = 3, }; void setLedColor(QLabel *label, int color, int size) { // 将label中的...
  • Qt QML状态states的使用

    2020-03-13 11:42:07
    状态 绿灯 黄灯 红灯 go 亮 灭 灭 wait 亮 亮 灭 stop 灭 灭 亮 鼠标点击之后,依次在这三个状态循环,类似状态机原理。 代码 import QtQuick 2.12 import QtQuick.Window 2.2 import QtQuick.Layouts ...
  • 基于QT的呼吸效果,亮点亮暗渐变,类似于呼吸的效果
  • import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtGui import QPixmap import SerialCommunication # module SerialCommunication.... # 获取“串口指示灯亮”图片文件路径 imgLedOff
  • 程序中演示了PyQt中编程实现自定义圆形指示灯控件的方法,通过程序界面可改变其属性值并能实时看到指示灯的外观变化情况,同时,在定时器中也实现了一个类似跑马灯效果的功能。 例子虽小,但涉及的编程点挺多,包括...
  • pyqt4 自定义圆形指示灯控件

    千次阅读 2018-09-29 19:10:23
    # -*- coding: utf-8 -*-# #---------------------------------------------------------------------------...# Name: 自定义圆形指示灯控件 #-----------------------------------------------------------------...
  • Qt控件1——呼吸

    2021-04-07 17:58:55
    Qt开发界面中建立数据通信时,通常使用一个呼吸亮来指示数据的通信,如:亮红灯代表数据中断,亮绿灯代表数据接通 在文件中使用了lightpoint.cpp文件封装了呼吸的主要操作函数,如下所示: #include "light...
  • 新功能(within existing modules)Qt 3DQt CoreQt GUIQt 位置Qt 多媒体Qt 网络Qt QMLQt QuickQt Quick Controls 2Qt SerialBusQt WebEngineQt WebSocketsQDoc03. 平台变更AndroidWayland嵌入式Linux(eglfs)04. 新...
  • QT:使用“状态模式”绘制界面

    千次阅读 2012-06-04 21:42:53
    QT与很多GUI库不同(如MFC),它不能随时随地地在界面上画图,只能在界面类的painterEvent中画图,如此一来,想在绘制QT界面时使用状态模式(GOF的23种设计模式之一)就有点困难了,作为解决方案,我先把要界面上的...
  • qt控件

    千次阅读 2019-05-06 09:42:37
    专业各种自定义控件编写+UI定制+输入法定制+视频监控+工业控制+仪器仪表+嵌入式linux+各种串口网络通信,童叟无欺,量大...Qt编写自定义控件大全 设计师designer完整源码(仅限Qt4):https://pan.baidu.com/s/1...
  • Qt平台上,因为Qt是跨平台的,钩子函数是在windon平台上面的,所以如果使用钩子函数的获取全局键盘消息,要使用&lt;windows.h&gt;头文件和user32.lib,这也可能破坏了Qt跨平台的优势。  因为某某原因,...
  • Qt编写自定义控件38-高亮按钮

    千次阅读 2019-07-25 10:14:24
    高亮按钮控件,既可以作为类似于交通指示灯使用,也可以作为设备状态指示灯使用,控件内置多套颜色风格,还可以自己设置颜色风格,按钮可以增加文字显示,非常适合需要在状态设备上显示小量的文字展示,按钮还可以...
  • 这包括各种参数、指示灯状态灯的仪表,还包括显示和声学效果。 ##运行演示的步骤## 请按照本文设置 Qt 开发环境。 从这里下载源代码。 ##OpenEmbedded 该示例包含在 meta-toradex-extra 中: 要添加该包,...
  • Qt实用技巧:会呼吸的痛(呼吸点/呼吸) +传送门http://blog.csdn.net/qq21497936/article/details/78747244 对萨芬的萨   Demo下载地址:http://download.csdn.net/download/qq21497936/10150349 ...
  • Qt】QModbusServer类

    2021-05-17 16:37:15
    00. 目录 文章目录00. 目录01. 概述02. 开发环境03. 公有类型04. 成员方法05.... qmake: QT += serialbus Since: Qt 5.8 Inherits: QModbusDevice Inherited By: QModbusRtuSerialSlave and QModb

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 354
精华内容 141
关键字:

qt状态指示灯