Qt5_在QWidget中画动态图

2023-10-22 01:20
文章标签 qt5 动态图 qwidget 中画

本文主要是介绍Qt5_在QWidget中画动态图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在以前的文章中,我们介绍了如何在QTabWidget中画网络拓扑图。今天,我们介绍一下,如何使得所画的图呈现出动态的变化,比如在网络拓扑中,随着时间的变化,一些节点显示红色,一些节点显示绿色。
准备过程:红色和绿色的图片
思路:依旧使用重写paintevent函数来实现画图功能,要使图片随着时间的变化更新,就需要使用计时器来触发页面更新,页面更新可以使用update函数。
代码:

#include "showtopology.h"
#include "mainwindow.h"
#include <QPainter>
#include <QWidget>
#include <QTime>
#include <QTimer>showtopology::showtopology(QWidget *parent) : QWidget(parent)
{QTimer *timer3= new QTimer();//声明计时器connect(timer3,SIGNAL(timeout()),this,SLOT(update()));//计时器用来触发更新timer3->start(1000);//更新间隔为1秒
}
void showtopology::paintEvent(QPaintEvent *event)
{QPainter paint(this);paint.setPen(Qt::DashLine);paint.setRenderHint(QPainter::Antialiasing, true);QPixmap ap1("ap1.png");//AP和两种STA的图片的声明;QPixmap img1("STA2.png");QPixmap img2("STA1.png");paint.drawPixmap(350,150,ap1);qsrand(time(NULL));int n1;double n[50];//一共有50个节点for (int i =0; i<50; i++){n1= qrand();n[i] = n1/10000000.0;}for(int i = 0; i<50; i++){if (n[i]<30)//使某一个节点的随机数小于30的显示STA2的图片{switch (i){case 0 :paint.drawPixmap(50,20,img1);break;case 1: paint.drawPixmap(100,100,img1);break;case 2:  paint.drawPixmap(350,200,img1);break;case 3: paint.drawPixmap(500,200,img1);break;case 4 :paint.drawPixmap(300,75,img1);break;case 5 :paint.drawPixmap(503,120,img1);break;case 6 :paint.drawPixmap(160,66,img1);break;case 7 :paint.drawPixmap(200,190,img1);break;case 8: paint.drawPixmap(360,190,img1);break;case 9 :paint.drawPixmap(350,180,img1);break;default : break;}paint.drawLine(350,150,50,20);paint.drawLine(350,150,100,100);paint.drawLine(350,150,350,200);paint.drawLine(350,150,500,200);paint.drawLine(350,150,300,75);paint.drawLine(350,150,503,120);paint.drawLine(350,150,160,66);paint.drawLine(350,150,200,190);paint.drawLine(350,150,360,190);paint.drawLine(350,150,350,180);}else//节点随机数大于30的显示STA1的图片{switch (i){case 0 :paint.drawPixmap(50,20,img2);//画STAbreak;case 1: paint.drawPixmap(100,100,img2);break;case 2:  paint.drawPixmap(350,200,img2);break;case 3: paint.drawPixmap(500,200,img2);break;case 4 :paint.drawPixmap(300,75,img2);break;case 5 :paint.drawPixmap(503,120,img2);break;case 6 :paint.drawPixmap(160,66,img2);break;case 7 :paint.drawPixmap(200,190,img2);break;case 8: paint.drawPixmap(360,190,img2);break;case 9 :paint.drawPixmap(350,180,img2);break;default : break;}paint.drawLine(350,150,50,20);//画连接线paint.drawLine(350,150,100,100);paint.drawLine(350,150,350,200);paint.drawLine(350,150,500,200);paint.drawLine(350,150,300,75);paint.drawLine(350,150,503,120);paint.drawLine(350,150,160,66);paint.drawLine(350,150,200,190);paint.drawLine(350,150,360,190);paint.drawLine(350,150,350,180);}}
}

最终的效果如下图所示:
效果显示图

这篇关于Qt5_在QWidget中画动态图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/258175

相关文章

Qt5项目打包

笔者本来想尝试将项目在Windows环境和Linux环境下都打包发布,但是Linux环境下各种办法都尝试了,还是有点问题,先总结记录下吧。 参考文章:https://blog.csdn.net/windsnow1/article/details/78004265 http://www.cnblogs.com/lvdongjie/p/7250547.html http://doc.qt.io/ar

基于VS2022+Qt5+C++的网络调试助手开发

目录 一、前言 二、环境准备以及项目创建 三、 项目实现 1.ui界面设计 2.添加NetWork模块   QTcpSocket 和 QTcpServer QUdpSocket 3.主要功能实现  ①IP扫描 ②端口设置  ③数据接收 ④数据发送 ⑤日志保存 4.打包成exe 四、效果展示 五、总结 一、前言 我之前用基于pyqt5一共实现过俩款小工

QT:QWidget 控件属性的介绍

控件属性介绍 🌴enabled 状态属性🌴geometry 几何属性示例一:改变控件尺寸示例二:更变控件位置window frame 的影响 🌴windowTitle 窗口标题🌴windowIcon 窗口图标🌴 qrc机制🌴windowOpacity 窗口透明度🌴cursor 修改鼠标显示样式示例一:通过编辑区直接修鼠标显示样式示例二:通过代码的方式设置鼠标在控件的显示效果示例

关于QWidget和QDialog窗体居中的问题

最近开发中,遇到了窗体不能居中的问题,看了网上的很多文章,窗口居中,无非都是move至窗口的中心目标; 有两种方式, 一种在构造函数中直接计算中心坐标; 另一种是在窗口show后再move至相应坐标。但是自己在构造函数中添加了对应的句子以后,窗体不在窗口的(0,0)点显示,反而在右下角显示,自己很是郁闷。网上的两种方法,基本操作如下: 方法一:在窗口(QWidget类及派生类)的构造函数中

Qt5控件模型工具类数据模型

其中,QDirModel可以以树形方式显示某个目录下的所有子目录及其相关信息;QProxyModel用于过渡旧的Model类型到新的类型上;QStandardItemModel使用最简单的Grid方式显示Model。此外,开发人员还可以从QAbstractListModel、QAbstractProxyModel和QAbstractTableModel继承出符合自己要求的Model。

VS配置QGIS二次开发(VS2019+QT5+QGIS3.14)

1.1 QGIS软件下载 QGIS软件是基于QT5开发的GIS系统,其易用性及其高效性使其已经成为当下极具竞争力的GIS系统,其占有率足以与Esri的ArcGIS等主流GIS软件分庭抗礼。QGIS软件因其开源特性也使得其广受广大GIS开发者的青睐。 在本次《地理信息系统设计与开发》的第一次课程作业中,笔者将就如何下载使用QGIS软件进行详细的介绍说明。 Step1:首先,我们需要使用搜索引擎

wsl2 安装qt5

sudo apt-get install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools qtcreator -ysudo apt-get install build-essential  libfontconfig1 mesa-common-dev -y   "qt5-default"从Ubuntu 21.04 存储库中就缺少了该软

QT5中connect函数无法触发槽函数

QT5中connect函数无法触发槽函数 趁着加班的时候,没事玩会QT5,结果发现connect链接一个button和clicked信号的槽函数,调试运行后,点击按钮一直无法触发槽函数。各种方法都试过了,最后才发现是个弱智问题。 以下代码为有问题代码: connect(button1, SIGNAL(clicked()), this, SLOT(showArea)); 以下为修改后代码:

VSCode 中画 UML 图(备忘)

vscode-drawio vscode-drawio 是一款 vscode 插件,支持在 vscode 中画流程图、思维导图、 UML 图 github 地址: https://github.com/hediet/vscode-drawio 安装 在 vscode 插件窗口内,搜索 vscode-drawio ,安装即可 使用 在 vscode 中打开 .drawio 扩展名的文件,

Qt是不是经常写个QWidget输入参数?

发现Qt自带的一个输入控件QInputDialog类 QInputDialog类提供了一个简单方便的对话框,用于从用户获取单个值。 输入值可以是字符串、数字或列表中的项。必须设置一个标签来告诉用户他们应该输入什么。 提供了五个静态方便函数:getText()、getMultiLineText()、getInt()、getDouble()和getItem()。所有的函数都可以以类似的方式使用