Qt+C++动力监控动画仿真SCADA上位机

 程序示例精选

Qt+C++动力监控动画仿真SCADA上位机

如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!

前言

这篇博客针对<<Qt+C++动力监控动画仿真SCADA上位机>>编写代码,代码整洁,规则,易读。 学习与应用推荐首选。


文章目录

一、所需工具软件

二、使用步骤

        1. 引入库

        2. 代码实现

        3. 运行结果

三、在线协助

一、所需工具软件

1. VS, Qt

2. C++

二、使用步骤

1.引入库

#include "MainWindow.h"

#include<iostream>
#include <QThread>

#include <thread>
#include <chrono>
#include <QObject>
#include <QThread>
#include <QDebug>
#include <QFile>
#include <QTimer>
#include <QMutex>
#include <QWaitCondition>
#include<opencv2/opencv.hpp>
#include <QDebug>
#include <QBitmap>
#include <QPainter>

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

2. 代码实现

代码如下:

void MainWindow::lightStrip1()
{
# if 1

    int imageCount = 11;
    int imageSpacing = 5; // 图片间距,-85

    qDebug() << "lightStrip2";
    QLabel* labelName = ui.label_4;

    int labelWidth = labelName->width();
    int labelHeight = labelName->height();
    qDebug() << "labelWidth: " << labelWidth;
    qDebug() << "labelHeight: " << labelHeight;
    qDebug() << "";

    labelName->clear();

    // 创建画布,与label_3一样大小
    QPixmap canvas(labelName->size());
    canvas.fill(Qt::transparent);

    // 创建画家并将画布设置为绘制目标
    QPainter painter(&canvas);

    // 计算每个加载的图片y坐标
    int y = yPos1;

    // 计算每个图片的总高度(包括间距)
    //int totalHeight = imageCount * (labelName->height() + imageSpacing) - imageSpacing - 80;
   //  int totalHeight = 100;
    int totalHeight = labelName->height();
    qDebug() << "totalHeight: " << totalHeight;

    // 同时绘制多个图片
    for (int i = 0; i < imageCount; i++) {
        // 加载当前图片
        QString imagePath = QString("./imgLightStrip/%1.png").arg(i + 1);
        QPixmap image(imagePath);

        // 定义新的尺寸
        int newWidth = 30;  // 替换为所需的宽度
        int newHeight = 100;  // 替换为所需的高度
        // 调整图片尺寸
        QPixmap resizedImage = image.scaled(newWidth, newHeight);


        int imageWidth = resizedImage.width();
        int imageHeight = resizedImage.height();
        qDebug() << "imageWidth: " << imageWidth;
        qDebug() << "imageHeight: " << imageHeight;
        qDebug() << "";

        int imageWidthT = labelName->width() * 0.3; //用label宽度的0.3比例作为图片宽度
        int imageHeightT = imageHeight * (labelName->width() * 0.3) / imageWidth;
        qDebug() << "imageWidthT: " << imageWidthT;
        qDebug() << "imageHeightT: " << imageHeightT;
        qDebug() << "";



        // 调整图片尺寸以适应label_3的宽度
        QPixmap scaledImage = resizedImage.scaledToWidth(labelName->width() * 0.3);

        // 计算水平居中的x坐标
        int x = (labelName->width() - scaledImage.width()) / 2;

        // 更新y坐标,实现图片向下流动的效果
        //y += totalHeight + 5; // 5是每个图片之间的间隔
        //int y = yPos + i * (labelName->height() + imageSpacing);
        int y = yPos1 + i * (imageHeightT + imageSpacing);
        if (y >= labelName->height()) { // 图片完全超出上方可视区域时,重新调整y坐标
            y -= totalHeight;
        }

        // 将图片绘制到画布上
        painter.drawPixmap(x, y, scaledImage);

        // 如果图片完全超出下方可视区域时,重新调整y坐标
        //if (y >= labelHeight + imageHeightT + 5) {
        //    y = yPos;
        //}
    }

#endif
}
class WorkerThread3 : public QThread {
	Q_OBJECT
public:
	void run() override {
		QTimer timer3;
		connect(&timer3, &QTimer::timeout, this, &WorkerThread3::lightStrip3);
		timer3.start(200); // 设置定时器间隔,单位为毫秒
		exec();
	}

	~WorkerThread3() {
		quit();  // 请求线程退出
		wait();  // 等待线程完成
	}

signals:
	void lightStrip3();
};

3. 运行结果

动画演示

 

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!
1)远程安装运行环境,代码调试
2)Qt, C++, Python入门指导
3)界面美化
4)软件制作

当前文章连接:Python+Qt桌面端与网页端人工客服沟通工具_alicema1111的博客-CSDN博客

博主推荐文章:python人脸识别统计人数qt窗体-CSDN博客

博主推荐文章:Python Yolov5火焰烟雾识别源码分享-CSDN博客

                         Python OpenCV识别行人入口进出人数统计_python识别人数-CSDN博客

个人博客主页:alicema1111的博客_CSDN博客-Python,C++,网页领域博主

博主所有文章点这里alicema1111的博客_CSDN博客-Python,C++,网页领域博主

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/86268.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

老铁,测试小白也可以飙车了!XMind2TestCase,逼格满满!

目录 一、XMind测试用例通用模板 二、导入TestLink 三、导入禅道&#xff08;ZenTao) 四、使用Web转换工具 总结 “ 测&#xff01;不&#xff01;用&#xff01;脑&#xff1f;别傻了&#xff0c;用XMind2TestCase&#xff0c;测试更轻松&#xff0c;更牛掰&#xff01; …

深度刨析数据要素,整合数据资源

数字经济已成为经济发展的一个核心引擎。数据作为新型生产要素&#xff0c;对传统生产方式变革具有重大影响&#xff0c;要构建以数据为关键要素的数字经济。 数据要素的定义 数据要素是指参与到社会生产经营活动中&#xff0c;为所有者或使用者带来经济效益的数据资源。因此…

centos8安装mysql

1.首先用finalShell远程连接到服务器 2.如果服务器之前安装过mysql请先卸载,我这里是用yum安装的&#xff0c;现在通过yum去卸载 yum remove -y mysql find / -name mysql //找到残留的文件&#xff0c;再通过rm -rf去删除对应的文件3.下面正式开始安装 &#xff08;1&#…

【核磁共振成像】傅里叶重建

目录 一、傅里叶重建二、填零三、移相四、数据窗函数五、矩形视野六、多线圈数据重建七、图像变形校正八、缩放比例九、基线校准 长TR&#xff0c;长TE&#xff0c;是T2加权像&#xff1b; 短TR&#xff0c;短TE&#xff0c;是T1加权像&#xff1b; 长TR&#xff0c;短TE&#…

机器学习笔记:线性链条件随机场(CRF)

0 引入&#xff1a;以词性标注为例 比如我们要对如下句子进行标注&#xff1a; “小明一把把把把住了”那么我么可能有很多种词性标注的方法&#xff0c;中间四个“把”&#xff0c;可以是“名词名词动词名词”&#xff0c;可以是“名词动词动词名词”等多种形式。 那么&#…

[SpringBoot3]Web服务

五、Web服务 基于浏览器的B/S结构应用十分流行。SpringBoot非常适合Web应用开发&#xff0c;可以使用嵌入式Tomcat、Jetty、Undertow或Netty创建一个自包含的HTTP服务器。一个SpringBoot的Web应用能够自己独立运行&#xff0c;不依赖需要安装的Tomcat、Jetty等。SpringBoot可以…

java-JVM 类加载机制

JVM 类加载机制 JVM 类加载机制分为五个部分&#xff1a;加载&#xff0c;验证&#xff0c;准备&#xff0c;解析&#xff0c;初始化&#xff0c;下面我们就分别来看一下这五个过程。 1.1. 加载 加载是类加载过程中的一个阶段&#xff0c;这个阶段会在内存中生成一个代表这…

Redis Pub/Sub 指南

Redis 不仅仅是一个数据库&#xff0c;还可以作为支持发布和订阅&#xff08;Pub/Sub&#xff09;操作的消息代理。本文将使用 Navicat for Redis 简要概述 Redis 的 Pub/Sub 功能。 关于发布或订阅消息范式 Pub/Sub 是一种模式&#xff0c;发送者&#xff08;广播者&#xf…

【微服务学习笔记】认识微服务

【微服务学习笔记】认识微服务 单体架构 分布式架构 微服务架构 SpringCloud 服务拆分和注意事项 服务拆分的案例demo 各个服务之间的数据库都是相互独立的&#xff0c;你不能直接访问对方的数据库&#xff0c;只能从一个服务像另外一个服务发起远程调用 在订单模块的服务中 …

C++信息学奥赛2046:【例5.15】替换字母

这段代码的功能是对输入的字符串进行处理&#xff0c;将字符串中的字符 a 替换为字符 b 后输出结果。 #include<bits/stdc.h> using namespace std; int main() {string s; // 定义字符串变量s&#xff0c;用来存储输入的字符串char a, b; // 定义字符变量a和b&#xff…

Android 11 Display亮灭屏

系统休眠唤醒的时候会涉及到亮灭屏&#xff0c;下面分析下系统&#xff08;高通8155平台&#xff09;Display亮灭屏流程 1. 点亮屏幕 点亮屏幕入口在framework/base/下面LightsService.java&#xff0c;然后通过调用SurfaceControl.java ,最终调用到framework/native下面的Sur…

Lnton羚通云算力平台【PyTorch】教程:关于Tensors的基础知识

Tensors Tensors 是一个特殊的数据结构&#xff0c;非常类似于数组和矩阵&#xff0c;在 PyTorch 中&#xff0c;我们使用 tensors 编码模型的输入和输出&#xff0c;以及模型的参数。 Tensors 非常类似于 NumPy 的 ndarrays&#xff0c; tensors 可以运行在 GPU 以及其他硬件…

so-vits-svc 4.1 详细使用记录

前几个月在B站听到了许多AI孙燕姿的“作品”&#xff0c;自己也很好奇是如何做到的。这不最近有了点时间&#xff0c;体验实践了一下。 其实so-vits-svc的文档写的已经比较详细了。但实际操作起来&#xff0c;因为环境的原因会遇到各种问题。本篇也是将我遇到的问题整理出来&a…

Windows使用MobaXterm远程访问ubuntu20.04桌面

参考ubuntu 2020.4 安装vnc 一、脚本文件 remote_setup.sh脚本文件内容&#xff1a; #! /bin/bash #参考链接&#xff1a;https://blog.csdn.net/hailangdeyingzi/article/details/124507304 sudo apt update sudo apt install x11vnc -y sudo x11vnc -storepasswd telpo.12…

LeetCode算法心得——k-avoiding 数组的最小总和(标记数组)

大家好&#xff0c;我是晴天学长&#xff0c;这是一个细节题和一部分的思维题哈&#xff01; 2) .算法思路 k-avoiding 数组的最小总和 1,填充一个1到n 的Boolean的数组 要n个数&#xff0c;但是数组大小不能确定。 所以建立1000的大小。 2.遍历筛选&#xff0c;如果数组中有这…

测试框架pytest教程(5)运行失败用例-rerun failed tests

# content of test_50.py import pytestpytest.mark.parametrize("i", range(50)) def test_num(i):if i in (17, 25):pytest.fail("bad luck") 运行这个文件&#xff0c;2个失败&#xff0c;48个通过。 要运行上次失败的测试用例&#xff0c;可以使用--l…

vue 简单实验 自定义组件 综合应用 传参数 循环

1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"todo-list-app"><ol><!--现在我们为每个 todo-item 提供 todo 对象todo 对象是变量&#xff0c;即其内容可以是动态的。…

Postman 如何进行参数化

前言 Postman作为一款接口测试工具&#xff0c;受到了非常多的开发工程师的拥护。 那么做为测试&#xff0c;了解Postman这款工具就成了必要的了。 这篇文章就是为了解决Postman怎么进行参数化的。 全局变量 全局变量是将这个变量设置成整个程序的都可以用&#xff0c;不用去…

深度学习3:激活函数

一、激活函数的简介与由来 激活函数&#xff1a;是用来加入非线性因素的&#xff0c;解决线性模型所不能解决的问题。 线性函数的组合解决的问题太有限了&#xff0c;碰到非线性问题就束手无策了。如下图。 通过激活函数映射之后&#xff0c;可以输出非线性函数。 最后再通过…

OpenHarmony应用实现二维码扫码识别

本文转载自《OpenHarmony应用实现二维码扫码识别》&#xff0c;作者zhushangyuan_ 概念介绍 二维码的应用场景非常广泛&#xff0c;在购物应用中&#xff0c;消费者可以直接扫描商品二维码&#xff0c;浏览并购买产品&#xff0c;如图是购物应用的扫描二维码的页面。 本文就以橘…
最新文章