Simulación de animación de tira de luz discontinua con indicador de marquesina Qt+C++

Ejemplos de programas seleccionados

Simulación de animación de tira de luz discontinua con indicador de marquesina Qt+C++

Si necesita instalar el entorno operativo o la depuración remota, consulte su tarjeta de presentación QQ personal al final del artículo para obtener asistencia remota de técnicos profesionales.

prefacio

Este blog escribe código para <<Qt+C++ Marquee-Indicator-Fan-Dotted Line Light Strip-Simulación de animación>>. El código es limpio, regular y fácil de leer. Recomendado para aprendizaje y aplicación.


Directorio de artículos

1. Herramientas y software necesarios

2. Pasos de uso

        1. Importar la biblioteca

        2. Implementación del código

        3. Resultados de ejecución

3. Asistencia en línea

1. Herramientas y software necesarios

1. VS, Qt

2.C++

2. Pasos de uso

1. Importar la biblioteca

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_MainWindow.h"
#include<iostream>
#include <QThread>

#include <chrono>
#include <QObject>
#include <QThread>
#include <QDebug>
#include <QFile>
#include <QTimer>
#include <QMutex>
#include <QWaitCondition>

#include <QDebug>

#include<QImage>
#include<QPixmap>
#include<QTransform>
#include<QPropertyAnimation>
#include<QGraphicsPixmapItem>
#include<QGraphicsScene>
#include <QtConcurrent/QtConcurrent>

2. Implementación del código

El código se muestra a continuación:

VMarqueeLabel::VMarqueeLabel(QWidget *parent)
	: QLabel(parent)
{
	connect(&m_Timer, &QTimer::timeout, this, [=] {
		if (isVisible()) {
			m_PosX -= 1;
			if (parent) {
				parent->update();
			}
			else {
				update();
			}

		}
	});
}

VMarqueeLabel::~VMarqueeLabel()
{
	clear();
}

void VMarqueeLabel::clear()
{
	m_Timer.stop();
	m_PosX = ORIGIN_X;
	QLabel::clear();
}

void VMarqueeLabel::setText(const QString& text)
{
	clear();
	QString content = QStringLiteral("<font style='font-family:MicrosoftYaHei;font-size:14px;color: #01EEC3;'>%1</font>").arg(text);
	m_Timer.start(10);
	adjustSize();
	m_PosX = width();
}

void VMarqueeLabel::paintEvent(QPaintEvent * evt)
{
	//计算x,y坐标
	QTextDocument doc;
	doc.setHtml(text());

	int height = doc.documentLayout()->documentSize().height();
	int y = (this->height() - height) / 2;
	//绘制
	QPainter painter(this);
	//先画背景
	QStyleOption opt;
	opt.init(this);
	style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
	painter.translate(m_PosX, y);
	doc.drawContents(&painter);
}


QSimpleLed::ColorGroup QSimpleLed::smColorPalette[6] {
    // CUSTOM
    { QColor(0, 0, 0), QColor(0, 0, 0), QColor(0, 0, 0), QColor(0, 0, 0) },
    // RED
    { QColor(255, 0, 0), QColor(191, 0, 0), QColor(28, 0, 0), QColor(128, 0, 0) },
    // GREEN
    { QColor(0, 255, 0), QColor(0, 191, 0), QColor(0, 28, 0), QColor(0, 128, 0) },
    // BLUE
    { QColor(0, 0, 255), QColor(0, 0, 191), QColor(0, 0, 28), QColor(0, 0, 128) },
    // YELLOW
    { QColor(255, 255, 0), QColor(191, 191, 0), QColor(28, 28, 0), QColor(128, 128, 0) },
    // ORANGE
    { QColor(255, 165, 0), QColor(255, 113, 1), QColor(20, 8, 5), QColor(99, 39, 24) },
};

QSimpleLed::QSimpleLed(QWidget *parent, QSimpleLed::LEDCOLOR color)
    : QAbstractButton(parent)
    , mColor(color)
{
    setCheckable(true);
    setMinimumSize(64, 64);
}

void QSimpleLed::setStates(QSimpleLed::LEDSTATES states)
{
    switch (states) {
    case ON:
        resetStatus();
        setChecked(true);
        mStates = ON;
        break;

    case OFF:
        resetStatus();
        break;

    case BLINK:
        resetStatus();

        if (!mBlinkTimer) {
            mBlinkTimer = new QTimer(this);
            connect(mBlinkTimer, &QTimer::timeout, this, &QSimpleLed::onBlinkTimerTimeout);
        }
        mBlinkTimer->setInterval(mInterval);
        mBlinkTimer->start();
        mStates = BLINK;
        break;

    default:
        qDebug() << "LED - unknown states!!!";
    }

    update();
}

void QSimpleLed::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    qreal realSize = qMin(width(), height());

    QRadialGradient radialGent;

    //
    // gradient - 1
    radialGent = QRadialGradient(QPointF(-500, -500)
                                 , 1500
                                 , QPointF(-500, -500));
    radialGent.setColorAt(0, QColor(224, 224, 224));
    radialGent.setColorAt(1, QColor(28, 28, 28));

    QPainter painter(this);

    painter.setBrush(QBrush(radialGent));
    painter.drawEllipse(QPointF(0, 0), 500, 500);

    //
    // gradient - 2
    radialGent = QRadialGradient(QPointF(500, 500)
                                 , 1500
                                 , QPointF(500, 500));
    radialGent.setColorAt(0, QColor(224, 224, 224));
    radialGent.setColorAt(1, QColor(28, 28, 28));

    painter.setBrush(QBrush(radialGent));
    painter.drawEllipse(QPointF(0, 0), 450, 450);

    if (isChecked()) {
        //
        // gradient - 3
        radialGent = QRadialGradient(QPointF(-500, -500)
                                     , 1500
                                     , QPointF(-500, -500));
        radialGent.setColorAt(0, smColorPalette[mColor].on0);
        radialGent.setColorAt(1, smColorPalette[mColor].on1);

    } else {
        //
        // gradient - 4
        radialGent = QRadialGradient(QPointF(500, 500)
                                     , 1500
                                     , QPointF(500, 500));
        radialGent.setColorAt(0, smColorPalette[mColor].off0);
        radialGent.setColorAt(1, smColorPalette[mColor].off1);
    }

    painter.setBrush(QBrush(radialGent));
    painter.drawEllipse(QPoint(0, 0), 400, 400);


}

void QSimpleLed::resizeEvent(QResizeEvent *event)
{
    Q_UNUSED(event);

    update();
}

void QSimpleLed::mousePressEvent(QMouseEvent *event)
{
    Q_UNUSED(event);
}

void QSimpleLed::onBlinkTimerTimeout()
{
    setChecked(!isChecked());
}

3. Resultados de ejecución

  

3. Asistencia en línea:

Si necesita instalar el entorno operativo o la depuración remota, consulte su tarjeta de presentación QQ personal al final del artículo para obtener asistencia remota de técnicos profesionales.
1) Instalación remota y entorno de ejecución, depuración de código
2) Guía de entrada de Qt, C++, Python
3) Embellecimiento de la interfaz
4) Producción de software

Enlace del artículo actual: herramienta de comunicación de servicio al cliente manual basada en web y escritorio Python + Qt_blog-CSDN de alicema1111

Artículos recomendados por blogueros: reconocimiento facial de Python contando personas blog qt form-CSDN

Artículo recomendado por Blogger: intercambio de código fuente de reconocimiento de humo de llama Python Yolov5-Blog CSDN

                         Python OpenCV identifica la cantidad de personas que entran y salen de la entrada peatonal_python identifica la cantidad de personas-CSDN Blog

Página de inicio del blog personal: blog_CSDN de alicema1111: Python, C ++, blogger web

Haga clic aquí para ver todos los artículos del blogger : blog_CSDN de alicema1111: Python, C++, blogger web

Supongo que te gusta

Origin blog.csdn.net/alicema1111/article/details/132388655
Recomendado
Clasificación