Qt示例5:用Qt画一个漂亮预警仪表

2023-11-10

以下是用Qt实现漂亮预警仪表的步骤和代码:

  1. 创建一个Qt项目,并添加一个主窗口。

  2. 在主窗口中添加QGraphicsView控件,用于绘制预警仪表。

  3. 创建一个QGraphicsScene对象,并将其设置为QGraphicsView的场景。

    QGraphicsScene *scene = new QGraphicsScene(this);
    ui->graphicsView->setScene(scene);
    
  4. 创建一个QGraphicsEllipseItem对象,用于表示预警仪表的外框。

    QGraphicsEllipseItem *outerCircle = new QGraphicsEllipseItem(QRectF(-120,-120,240,240));
    outerCircle->setPen(QPen(Qt::black, 4));
    scene->addItem(outerCircle);
    
  5. 创建一个QGraphicsEllipseItem对象,用于表示预警仪表的中心点。

    QGraphicsEllipseItem *centerCircle = new QGraphicsEllipseItem(QRectF(-15,-15,30,30));
    centerCircle->setBrush(QBrush(Qt::red));
    centerCircle->setPen(QPen(Qt::black, 2));
    centerCircle->setZValue(1);
    scene->addItem(centerCircle);
    
  6. 创建一些QGraphicsLineItem对象,用于表示预警仪表的刻度线。

    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);
        line->setPos(0, 0);
        scene->addItem(line);
    }
    
  7. 创建一个QGraphicsPolygonItem对象,用于表示预警仪表的指针。

    QPolygonF polygon;
    polygon << QPointF(-10, 0) << QPointF(0, -120) << QPointF(10, 0);
    QGraphicsPolygonItem *pointer = new QGraphicsPolygonItem(polygon);
    pointer->setBrush(QBrush(Qt::red));
    pointer->setPen(QPen(Qt::black, 2));
    pointer->setZValue(2);
    pointer->setPos(0, 0);
    scene->addItem(pointer);
    
  8. 在主窗口的定时器中更新指针的旋转角度。

    void MainWindow::timerEvent(QTimerEvent *event)
    {
        Q_UNUSED(event);
        int angle = ui->spinBox->value();
        QGraphicsItem *item = ui->graphicsView->scene()->items().at(3);
        item->setRotation(angle);
    }
    

完整的代码如下:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QGraphicsScene>
#include <QGraphicsEllipseItem>
#include <QGraphicsPolygonItem>
#include <QGraphicsLineItem>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

protected:
    void timerEvent(QTimerEvent *event);

private:
    Ui::MainWindow *ui;
    QGraphicsScene *scene;
    QGraphicsEllipseItem *outerCircle;
    QGraphicsEllipseItem *centerCircle;
    QGraphicsPolygonItem *pointer;
    QList<QGraphicsLineItem*> lines;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 创建场景
    scene = new QGraphicsScene(this);
    ui->graphicsView->setScene(scene);

    // 创建外框
    outerCircle = new QGraphicsEllipseItem(QRectF(-120,-120,240,240));
    outerCircle->setPen(QPen(Qt::black, 4));
    scene->addItem(outerCircle);

    // 创建中心点
    centerCircle = new QGraphicsEllipseItem(QRectF(-15,-15,30,30));
    centerCircle->setBrush(QBrush(Qt::red));
    centerCircle->setPen(QPen(Qt::black, 2));
    centerCircle->setZValue(1);
    scene->addItem(centerCircle);

    // 创建指针
    QPolygonF polygon;
    polygon << QPointF(-10, 0) << QPointF(0, -120) << QPointF(10, 0);
    pointer = new QGraphicsPolygonItem(polygon);
    pointer->setBrush(QBrush(Qt::red));
    pointer->setPen(QPen(Qt::black, 2));
    pointer->setZValue(2);
    pointer->setPos(0, 0);
    pointer->setRotation(0);
    scene->addItem(pointer);

    // 创建刻度线
    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);
        line->setPos(0, 0);
        lines.append(line);
        scene->addItem(line);
    }

    // 启动定时器
    startTimer(100);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::timerEvent(QTimerEvent *event)
{
    Q_UNUSED(event);
    int angle = ui->spinBox->value();
    QGraphicsItem *item = ui->graphicsView->scene()->items().at(3);
    pointer->setRotation(angle);
}

用Qt画一个漂亮预警仪表,具有立体感,代码,描述设计步骤
预警仪表
代码下载

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt示例5:用Qt画一个漂亮预警仪表 的相关文章

  • 如何搭建qtwayland?

    我花了一整天的时间尝试使用QtWayland Compositor 1 0在 Qt 创建者中 我已经遵循了从那里开始的所有步骤https wiki qt io QtWayland https wiki qt io QtWayland但我收到
  • 使用 QSet 作为 Qt 地图容器中的键

    我需要一个映射 其中键是唯一的 并且每个键都是一组或自定义 POD 结构 其中包含 3 个数据项 这些值只是指向对象实例的指针 从阅读Qt 的 QMap 与 QHash 的文档 http qt project org doc qt 4 8
  • 另一个宏中的 Q_PROPERTY 宏

    如何放置Q PROPERTY另一个宏里面 辅助宏 define SimpleAllinOne member type public void Set member type arg member m member arg member ty
  • 如何在Qt无框窗口中实现QSizeGrip?

    如何使用 Qt 无框窗口实现 QSizeGrip 代码会是什么样的 您只需在布局内窗口的一角添加 QSizeGrip 即可使其保持在该角落 QDialog dialog new QDialog 0 Qt FramelessWindowHin
  • 如何将 QByteArray 转换为十六进制字符串?

    我有打击QByteArray QByteArray ba ba 0 0x01 ba 1 0x10 ba 2 0x00 ba 3 0x07 我真的不知道如何将此 QByteArray 转换为结果字符串 其中包含 01100007 我将使用 Q
  • 在 Qt 5 中嵌入 Python

    我想将 Python 解释器嵌入到 Qt 5 应用程序中 我在 Qt 5 中有一个工作应用程序 但是当我把 include
  • SWI-Prolog 与 C++ 接口的问题

    我试图让 SWI Prolog 与 C 很好地配合 现在束手无策 现在 在我开始准确解释我的问题是什么之前 我想首先说明我的项目是关于什么的以及我选择了哪些工具来开发解决方案 我的教授分配给我的任务是开发一个 GUI 程序 作为 SWI p
  • 在哪里可以找到 QT 5.3.0 命令提示符

    用于学习Qt的书 C gui programming with qt 4 2nd 版 我需要Qt的命令提示符 我已经安装了Qt 5 3 0 creator 5 3 0开源 但不知道它的命令提示符在哪里 有人可以帮助我吗 我认为您正在寻找的是
  • 如何使 Python、QT 和 Webkit 在无头服务器上工作?

    我有 Debian Linux 服务器 我用它来做各种事情 我希望它能够完成一些我需要定期完成的网络抓取工作 这段代码可以是在这里找到 http bit ly QeqvzX import sys from PyQt4 QtGui impor
  • 在 QtCreator 中使用 .pro 和 .pri 正确(树)显示 Qt 项目

    是否可以使用项目包含文件 pri 显示不止一个额外级别 例如如果 pro文件包括 pri文件包含两个 pri files pro pri pri pri 在 QtCreator 项目 中显示具有误导性 pro pri pri pri 它根本
  • 在没有加载器的情况下实例化内联组件

    有没有办法实例化内联Component 即在同一文件中定义 而不使用Loader 我不太关心使用的性能影响Loader因为我要用很多东西污染我的文件Loader包装纸 我发现从 JavaScript 创建动态 QML 对象 http doc
  • 获取 QListView 中所有可见项目的简单方法

    我正在尝试使用 Qt Framework 开发一个图像库应用程序 应用程序从所选文件夹加载所有图像 并使用 QListView 控件显示这些图像 但现在我想通过仅加载用户可见的图像来减少内存消耗 由于没有直接函数来获取视图中的所有可见项目
  • Qt 为什么使用 QString::number() 而不是 QLocale().toString()?

    我正在开发的应用程序将在许多国家推出 并且需要支持他们的语言 我一直在回顾我的代码并替换以下每个实例 QString number and QString toDouble with QLocale toString and QLocale
  • 清除pyqt中布局中的所有小部件

    有没有办法清除 删除 布局中的所有小部件 self plot layout QtGui QGridLayout self plot layout setGeometry QtCore QRect 200 200 200 200 self r
  • 在 Qt 中使用多个不同的流读取同一文件

    使用 Qt 是否可以使用多个流读取文件以同时访问其中的不同数据部分 请注意 Qt 中的流 QTextStream QDataStream 不处理底层设备中的位置 流类只是一个包装器 用于更轻松地解析设备 QFile 实例 内的二进制数据 因
  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • 如何将自定义 Qt 类型与 QML 信号一起使用?

    我在 Qt 5 2 qml 应用程序中创建了一个自定义类型 class Setting public QObject Q OBJECT Q PROPERTY QString key READ key WRITE setKey Q PROPE
  • 如何在Android中使用QML - QWebView

    我想在 Android 中部署一个 YouTube 应用程序 但它只能在我的电脑上运行 在安卓上不起作用 它不加载任何视频 问题仅出在 QWebView 上 我使用了与此类似的代码 http doc qt io archives qt 5
  • 了解 Qt3D 创建的网格

    我创建了一个 Qt3D 网格 如下所示 Qt3DCore QEntity newEntity new Qt3DCore QEntity Qt3DExtras QConeMesh mesh new Qt3DExtras QConeMesh m
  • QTabWidget 选项卡在垂直方向,但文本在水平方向

    我正在尝试用 C Qt 制作一个带有这样的侧边栏的应用程序 但是当将 QTabWidget 方向设置为西时 它会使文本垂直 如何让文本位于左侧 但水平对齐 PS 我不需要图标 提前致谢 您可以使用QListWidget http doc q

随机推荐

  • Python 位运算符

    Python 按位运算符用于对整数执行按位计算 将整数转换为二进制格式 然后逐位执行运算 因此称为按位运算符 Python 按位运算符仅适用于整数 最终输出以十进制格式返回 Python 按位运算符也称为二元运算符 Python 位运算符
  • 如何在 Ubuntu 14.04 上使用 UFW 设置防火墙

    介绍 UFW 即简单防火墙 是一个接口iptables旨在简化配置防火墙的过程 尽管iptables虽然是一个可靠且灵活的工具 但对于初学者来说 学习如何使用它来正确配置防火墙可能会很困难 如果您希望开始保护您的网络 并且不确定使用哪个工具
  • 如何在 Ubuntu 14.04 上将 MySQL 或 MariaDB 与 Django 应用程序一起使用

    介绍 Django 是一个用于快速创建 Python 应用程序的灵活框架 默认情况下 Django 应用程序配置为将数据存储到轻量级 SQLite 数据库文件中 虽然这在某些负载下效果很好 但更传统的 DBMS 可以提高生产性能 在本指南中
  • Spring MVC @RequestMapping 注解示例,包含控制器、方法、标头、参数、@RequestParam、@PathVariable

    RequestMapping is one of the most widely used Spring MVC annotation org springframework web bind annotation RequestMappi
  • Java 中的 SQL 注入以及如何轻松预防

    什么是 SQL 注入 SQL注入是十大 Web 应用程序漏洞之一 简单来说 SQL注入是指通过用户输入的数据在查询中注入 插入SQL代码 它可以发生在任何使用关系数据库 如 Oracle MySQL PostgreSQL 和 SQL Ser
  • 如何在 Ubuntu 上使用 Stunnel 设置 SSL 隧道

    Status 已弃用 本文已弃用 不再维护 Reason Ubuntu 12 04 已于 2017 年 4 月 28 日终止生命周期 EOL 并且不再接收安全补丁或更新 请参阅 本文作为参考可能仍然有用 但可能不遵循最佳实践或适用于此版本或
  • 如何在 Ubuntu 14.04 LTS 上设置 Apache 虚拟主机

    介绍 Apache Web 服务器是在互联网上提供 Web 内容的最流行的方式 它占互联网上所有活跃网站的一半以上 并且非常强大和灵活 Apache 将其功能和组件分解为可以独立定制和配置的单独单元 描述单个站点或域的基本单位称为virtu
  • 如何使用多站点设置多个 WordPress 站点

    关于多个 WordPress 安装 2010 年 WordPress 发布了流行的内容管理平台 3 0 版本 在该版本中包含的众多改进中 WordPress 社区将 WordPress MU 合并到了主要的 WordPress 配置中 自更
  • Java 9 功能与示例

    Java 9 是一个主要版本 它为我们开发人员带来了很多功能 在本文中 我们将详细研究 Java 9 功能 Java 10 已发布 有关 Java 10 版本的完整概述 请访问Java 10 特性 Java 9 特性 Some of the
  • 如何在 CentOS 7 服务器上添加和删除用户

    介绍 当您第一次开始使用新的 Linux 服务器时 添加和删除用户通常是您需要做的第一件事 在本指南中 您将学习如何创建用户帐户 分配sudo权限 并删除 CentOS 7 服务器上的用户 先决条件 要完成本教程 您将需要 一台 CentO
  • 如何在 Ubuntu 22.04 上设置私有 Docker 注册表

    作者选择了免费开源基金接受捐赠作为为捐款而写程序 介绍 Docker 注册表是一个管理 Docker 容器镜像存储和交付的应用程序 注册表集中容器映像并减少开发人员的构建时间 Docker 镜像通过虚拟化保证相同的运行时环境 但构建镜像可能
  • 如何在 Ubuntu 16.04 上将 Nginx Web 根移动到新位置

    介绍 在 Ubuntu 上 默认情况下 Nginx Web 服务器将其文档存储在 var www html 它通常与操作系统的其余部分一起位于根文件系统上 但有时 将文档根移动到另一个位置会很有帮助 例如单独安装的文件系统 例如 如果您从同
  • 如何使用BackupPC在Ubuntu 12.04 VPS上创建备份服务器

    Status 已弃用 本文介绍不再受支持的 Ubuntu 版本 如果您当前运行的服务器运行 Ubuntu 12 04 我们强烈建议您升级或迁移到受支持的 Ubuntu 版本 升级到Ubuntu 14 04 从 Ubuntu 14 04 升级
  • 如何设置 Nginx 负载均衡

    关于负载均衡 负载平衡是一种有用的机制 可以在多个功能强大的虚拟专用服务器之间分配传入流量 通过将处理机制分配给多台计算机 可以为应用程序提供冗余 确保容错和提高稳定性 用于负载平衡的循环算法将访问者发送到一组 IP 中的一个 在最基本的层
  • 如何在 Java 中使用运算符

    作者选择了免费开源基金接受捐赠作为为捐款而写程序 介绍 An operator是一个或多个符号的组合 比如著名的算术运算符减号 并加上 或更高级的instanceof 当您对值或变量应用运算符时 您会得到运算结果 此类操作是编程的基础 因为
  • 如何在 Ubuntu 14.04 服务器上安装 Node.js

    介绍 Node js 是一个用于服务器端编程的 Javascript 平台 允许用户快速构建网络应用程序 通过在前端和后端都利用 Javascript 开发可以更加一致并在同一系统内进行设计 在本指南中 我们将向您展示如何在 Ubuntu
  • mysql如何显示ddl_Mysql DDL语句之视图

    Mysql 视图是一个虚拟表 内容由 select 查询语句定义 同真实的表数据一致 但是视图并不在数据库中以存储的数据值形式存在 试图引用自定义查询表的字段 并且在引用试图时动态生成 对其所引用的基础表来说 Mysql 视图的作用类似于筛
  • 【计算机视觉

    文章目录 一 ModaNet 二 SKU110K 三 SceneNet 四 VT5000 五 Washington RGB D 六 Argoverse HD 七 CADC Canadian Adverse Driving Condition
  • 小技巧——宝塔面板重启、重置命令

    1 Centos 安装脚本 yum install y wget wget O install sh http download bt cn install install sh sh install sh 2 Ubuntu Deepin
  • Qt示例5:用Qt画一个漂亮预警仪表

    以下是用Qt实现漂亮预警仪表的步骤和代码 创建一个Qt项目 并添加一个主窗口 在主窗口中添加QGraphicsView控件 用于绘制预警仪表 创建一个QGraphicsScene对象 并将其设置为QGraphicsView的场景 QGrap