Qt QGraphicsScene、QGraphicsView类实现仪表盘

Qt QGraphicsScene、QGraphicsView类实现仪表盘

  • 【1】UI界面设计
  • 【2】效果
  • 【3】QGraphicsScene简介
  • 【4】QGraphicsEllipseItem简介
  • 【5】QGraphicsPolygonItem简介
  • 【6】QGraphicsLineItem简介
  • 【7】QGraphicsView简介
  • 【8】仪表源码
    • 头文件
    • 源码


【1】UI界面设计

在这里插入图片描述

【2】效果

在这里插入图片描述

【3】QGraphicsScene简介

QGraphicsScene是Qt框架中用于处理2D图形对象的类。它提供了一个虚拟的绘图区域,可以在其中添加、移动和管理图形项。QGraphicsScene能够管理大量的图形项,并且能够自动处理图形项的显示、剪辑、碰撞检测等功能。

使用QGraphicsScene,你可以创建和管理各种各样的2D图形对象,如矩形、椭圆、多边形、路径等。每个图形对象都是一个QGraphicsItem的子类,可以设置它们的位置、大小、旋转、颜色等属性。

QGraphicsScene提供了方法来添加、删除、查找图形项,以及处理图形项之间的交互。通过将图形项添加到场景中,你可以在图形视图中显示这些图形对象,并进行交互操作。

除了基本的图形对象,QGraphicsScene还支持添加自定义的图形项,你可以通过继承QGraphicsItem类来创建自己的图形项。这样,你可以实现更复杂的图形对象,以满足特定的需求。

总之,QGraphicsScene是Qt中用于管理和呈现2D图形对象的重要类,为开发者提供了灵活且强大的工具来创建丰富的图形用户界面。


【4】QGraphicsEllipseItem简介

QGraphicsEllipseItem是Qt框架中的一个图形项类,用于在QGraphicsScene中绘制椭圆形状的图形对象。它是QGraphicsItem的子类,继承了QAbstractGraphicsShapeItem类,因此具有绘制和编辑2D形状的能力。

使用QGraphicsEllipseItem,你可以在场景中创建和管理椭圆形状的图形对象。你可以指定椭圆的位置、大小、颜色、线条样式等属性,并可以通过设置椭圆的旋转角度来实现各种变换效果。

QGraphicsEllipseItem提供了一些方法来设置和获取椭圆的属性,比如setRect()、setPen()、setBrush()等。通过这些方法,你可以动态地修改椭圆的外观和位置。

除了基本的绘制能力,QGraphicsEllipseItem还支持与其他图形项的交互操作。你可以使用鼠标事件来捕获椭圆的点击、移动、悬停等操作,并根据需要进行相应的处理。

总之,QGraphicsEllipseItem是Qt中的一个用于绘制椭圆形状的图形项类,它提供了丰富的属性和方法,使开发者能够轻松地创建、编辑和交互椭圆形状的图形对象。


【5】QGraphicsPolygonItem简介

QGraphicsPolygonItem是Qt框架中的一个图形项类,用于在QGraphicsScene中绘制多边形形状的图形对象。它是QAbstractGraphicsShapeItem类的子类,因此具有绘制和编辑2D形状的能力。

使用QGraphicsPolygonItem,你可以在场景中创建和管理多边形形状的图形对象。你可以指定多边形的顶点坐标,设置线条样式、填充颜色等属性,并可以通过设置多边形的旋转角度来实现各种变换效果。

QGraphicsPolygonItem提供了一些方法来设置和获取多边形的属性,比如setPolygon()、setPen()、setBrush()等。通过这些方法,你可以动态地修改多边形的外观和位置。

除了基本的绘制能力,QGraphicsPolygonItem还支持与其他图形项的交互操作。你可以使用鼠标事件来捕获多边形的点击、移动、悬停等操作,并根据需要进行相应的处理。你还可以使用碰撞检测功能来判断多边形与其他图形项之间是否发生了碰撞。

总之,QGraphicsPolygonItem是Qt中的一个用于绘制多边形形状的图形项类,它提供了丰富的属性和方法,使开发者能够轻松地创建、编辑和交互多边形形状的图形对象。


【6】QGraphicsLineItem简介

QGraphicsLineItem是Qt框架中的一个图形项类,用于在QGraphicsScene中绘制直线形状的图形对象。它是QGraphicsItem的子类,继承了QAbstractGraphicsShapeItem类,因此具有绘制和编辑2D形状的能力。

使用QGraphicsLineItem,你可以在场景中创建和管理直线形状的图形对象。你可以指定直线的起点和终点坐标,设置线条样式、颜色等属性,并可以通过设置直线的旋转角度来实现各种变换效果。

QGraphicsLineItem提供了一些方法来设置和获取直线的属性,比如setLine()、setPen()等。通过这些方法,你可以动态地修改直线的外观和位置。

除了基本的绘制能力,QGraphicsLineItem还支持与其他图形项的交互操作。你可以使用鼠标事件来捕获直线的点击、移动、悬停等操作,并根据需要进行相应的处理。你还可以使用碰撞检测功能来判断直线与其他图形项之间是否发生了碰撞。

总之,QGraphicsLineItem是Qt中的一个用于绘制直线形状的图形项类,它提供了丰富的属性和方法,使开发者能够轻松地创建、编辑和交互直线形状的图形对象。


【7】QGraphicsView简介

QGraphicsView是Qt框架中的一个用于显示和管理图形场景的类。它是一个可视化的视图部件,允许用户在其中展示和操作一个或多个图形项。

QGraphicsView提供了一个可滚动和缩放的视图窗口,用于呈现QGraphicsScene中的图形内容。它可以根据需要自动调整视图的大小,使所有的图形项都能够显示在窗口内。

QGraphicsView作为一个容器窗口,可以在其中添加和管理多个图形项,包括例如QGraphicsItem、QGraphicsPixmapItem和QGraphicsTextItem等。开发者可以通过QGraphicsView提供的方法,来操作和管理这些图形项,例如移动、旋转、缩放、选择和删除等。

除了基本的图形项管理功能,QGraphicsView还提供了交互功能。开发者可以通过鼠标和键盘事件来捕捉和响应用户的操作,例如点击、双击、拖拽和滚动等。这样,开发者可以方便地实现与图形项的交互,例如选择、移动和编辑等。

另外,QGraphicsView还支持视图变换,开发者可以通过设置不同的视图矩阵来实现视图的平移、旋转、缩放和剪裁等效果。这样,开发者可以自由地控制和实现复杂的视觉效果。

总之,QGraphicsView是Qt框架中用于显示和管理图形场景的关键部件,它提供了丰富的功能和灵活的接口,开发者可以使用它来展示、操作和交互多个图形项,实现各种复杂的图形界面。

【8】仪表源码

头文件

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QDebug>#include <QGraphicsScene>                    // 图形场景
#include <QGraphicsEllipseItem>             // 椭圆项
#include <QGraphicsPolygonItem>          // 多边形项
#include <QGraphicsLineItem>                // 直线项QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();protected:void timerEvent(QTimerEvent *event);private slots:private:Ui::Widget *ui;// 用户自定义QGraphicsScene * scene;QGraphicsEllipseItem *outerCircle;          // 外圆QGraphicsEllipseItem *centerCircle;        // 中圆QGraphicsPolygonItem*polyonItem;      // 多边形QList<QGraphicsLineItem *>lines;         // 直线集合};
#endif // WIDGET_H

源码

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);qDebug()<<"x = "<<ui->graphicsView->x()<<" y = "<<ui->graphicsView->y();qDebug()<<"rx = "<<ui->graphicsView->pos().rx()<<" ry = "<<ui->graphicsView->pos().ry();// 创建图形场景对象scene = new QGraphicsScene(this);   // 指定父亲 好进行资源回收ui->graphicsView->setScene(scene);// 创建外框// 画的是矩形,以矩形中心点建立坐标系,x右侧为正数,左侧为负数 ;y上侧为负数,下侧负数。左上角为坐标起始原点outerCircle = new QGraphicsEllipseItem(QRectF(-120,-120,240,240));outerCircle->setPen(QPen(Qt::black,4));qDebug() << "outerCircle->zValue() = "<<outerCircle->zValue();      // 0scene->addItem(outerCircle);            // 添加外圆qDebug() << "outerCircle:" << outerCircle;// 创建中心点// 画的是矩形,以矩形中心点建立坐标系,x右侧为正数,左侧为负数 ;y上侧为负数,下侧负数。左上角为坐标起始原点centerCircle = new QGraphicsEllipseItem(QRectF(-15,-15,30,30));centerCircle->setBrush(QBrush(Qt::red));centerCircle->setPen(QPen(Qt::black, 2));// 一个z值较高的兄弟项目总是被画在另一个z值较低的兄弟项目之上。centerCircle->setZValue(1);scene->addItem(centerCircle);qDebug() << "centerCircle:" << centerCircle;// 创建指针QPolygonF polygon;polygon << QPointF(-10, 0) << QPointF(0, -120) << QPointF(10, 0);polyonItem = new QGraphicsPolygonItem(polygon);polyonItem->setBrush(QBrush(Qt::red));polyonItem->setPen(QPen(Qt::black, 2));// 一个z值较高的兄弟项目总是被画在另一个z值较低的兄弟项目之上。polyonItem->setZValue(2);polyonItem->setPos(0, 0);polyonItem->setRotation(0);scene->addItem(polyonItem);qDebug() << "polyonItem:" << polyonItem;// 创建刻度线 12个for (int i = 0; i < 12; i++) {QGraphicsLineItem *line = new QGraphicsLineItem(-100, 0, -80, 0); // 正左边第一条直线line->setPen(QPen(Qt::black, 3));line->setRotation(i * 30); // 围绕z轴设置顺时针旋转角度。line->setPos(0, 0);lines.append(line);scene->addItem(line);}// 启动定时器startTimer(1000);
}Widget::~Widget()
{delete ui;
}void Widget::timerEvent(QTimerEvent *event)
{qDebug() << "Timer ID:" << event->timerId();static quint64 i = 0;ui->spinBox->setValue(i++);int angle = ui->spinBox->value();polyonItem->setRotation(angle);
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式系统消息通信技术:MOM与RPC

一、中间件 什么是中间件 中间件&#xff08;Middleware&#xff09;是处于操作系统和应用程序之间的软件&#xff0c;也有人认为它应该属于操作系统中的一部分。人们在使用中间件时&#xff0c;往往是一组中间件集成在一起&#xff0c;构成一个平台&#xff08;包括开发平台…

uniapp 一键登录

官网文档地址https://uniapp.dcloud.net.cn/univerify.html 一、开发前准备 1、需要先开通uni一键登录服务 开通成功后会得到 apiKey、apiSecret。这2个信息&#xff0c;后续需要配置在uniCloud的云函数里。同时注意保密&#xff0c;这2个信息也是计费凭证 2、开通uniCloud服…

利用spleeter库实现人声和音乐分离(踩过的坑及解决方法)

0&#xff1a;起因 事情的起因是&#xff1a;想用一首歌的伴奏剪视频&#xff0c;但找遍各大平台&#xff0c;都只有原曲&#xff0c;没有伴奏。能找到的进行人声和背景音乐分离的软件都要收费&#xff0c;最后决定用spleeter库&#xff0c;尝试进行音频分离。 1&#xff1a;…

第四课—大学英语四六级备考—听力专项

Key Words 1.monarch n.君主政治 非常抱歉误解了您的问题。以下是关于"monarch"这两个意义的常见用法、造句和固定搭配的例子&#xff1a; 1. Monarch&#xff08;君主&#xff09;&#xff1a; - 造句&#xff1a; - The monarch of the country made an…

Kubernetes Pod篇

Pod基础概念&#xff1a; Pod是kubernetes中最小的资源管理组件&#xff0c;Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的&#xff0c;例如&#xff0c;用于管理Pod运行的S…

RocketMQ_高级功能

目录 一、消息存储 1、存储介质以及性能对比 2、消息的存储和发送 3、消息存储结构 4、刷盘机制 二、高可用性机制 1、消息消费高可用 2、消息发送高可用 3、消息主从复制 三、负载均衡 1、Producer负载均衡 2、Consumer负载均衡 四、消息重试 1、顺序消息的重试…

串口通信-Modbus-rtu协议例程(51实现)

/*务必通过ISP通讯&#xff0c;烧录时&#xff0c;选11.0592Mhz进行烧录&#xff0c;否则数据会乱码modbus-rtu 处理过程主机数据接收(超时机制&#xff0c;不定长接收)->数据校验码判断-> */ #include <STC15F2K60S2.H> #include "string.h" typedef un…

CentOS 8安装Oracle 19c rpm包

一、环境 centos 8 oracle 19c rpm安装 二、安装前准备 1、创建用户组 groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle passwd oracle2、安装依赖包 如果yum找不到安装包&#xff0c;可以去下载 https://centos.pkgs.org/ 点击跳转 缺少的依赖包可…

【JavaSE】程序逻辑控制

目录 【1】概念 【2】顺序结构 【3】分支结构 【3.1】if 语句 【3.2】switch 语句 【4】循环结构 【4.1】while 循环 【4.2】for 循环 【4.3】do while 循环 【4.4】break 关键字 【4.5】continue 关键字 【5】输入输出 【5.1】输出到控制台 【5.2】从键盘输入 …

stm32或gd32移植libcanard实现UAVCAN协议

一、源码下载 1、git下载 点击我下载 2、csdn下载 自己上传的点击下载 二、源码移植 我自己是使用rt-thread操作系统移植的。但是不局限与操作系统&#xff0c;裸机也可以。 1、首先将源码加入到工程 2、分别实现一个内存的分配与释放函数&#xff0c;他是一个指针函数&…

js 左右滑动切换图片

一、效果图 二、代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdev…

vscode设置可以搜索包含node_modules中的文件

步骤3中删除掉node_modules&#xff0c;再搜索的时候&#xff0c;node_modules的匹配到代码也会展示出来了。 如果不想要被搜索文件包含node_modules,再添加上就可以。