QT自定义控件0-360°刻度尺

news2024/9/30 11:39:30

支持0到360°,360到0°的过度。
直接上代码,可以直接用,使用的paintevent事件实现的,没啥好讲的。
请添加图片描述
.cpp

void Widget::drawCourse(QPainter& p,QPen pen,QFont font)
{
    double currentNumber = m_ang;
    p.setBrush(Qt::black);
    p.drawRect(rect());

    //航向刻度图
    pen.setColor("#ffffff");
    pen.setWidth(2);
    p.setPen(pen);
    font.setPointSize(20);
    p.setFont(font);
    p.drawLine(0,0,width(),0);
    int mainScale = 360;
    double movePos = currentNumber*35-width()/2;
    //360前半截
    for (int i = 0; i < mainScale+1; ++i) {
        if (i%5 == 0)
        {
            pen.setWidth(2);
            p.setPen(pen);
            p.drawLine(0+i*35-movePos,0,0+i*35-movePos,26);
            p.drawText(0+i*35-30-movePos,33,60,30,Qt::AlignCenter,QString::number(i%360));
        }
        else
        {
            pen.setWidth(1);
            p.setPen(pen);
            p.drawLine(0+i*35-movePos,0,0+i*35-movePos,20);
        }
    }
    //0后半截,360前半截
    double startPt = 0;
    double showSpan = width()/35.00;
    if (currentNumber > 360 - showSpan || currentNumber < 360 - showSpan)
    {
        if (currentNumber > 360 - showSpan)
            startPt = (360 - currentNumber + showSpan/2)*35;
        else
            startPt = (showSpan/2 - currentNumber)*35 - 35*mainScale;
        for (int i = 0; i < mainScale+1; ++i) {
            if (i%5 == 0)
            {
                pen.setWidth(2);
                p.setPen(pen);
                p.drawLine(0+i*35+startPt,0,0+i*35+startPt,26);
                p.drawText(0+i*35-30+startPt,33,60,30,Qt::AlignCenter,QString::number(i%360));
            }
            else
            {
                pen.setWidth(1);
                p.setPen(pen);
                p.drawLine(0+i*35+startPt,0,0+i*35+startPt,20);
            }
        }
    }

    //航向中线
    p.setPen(QPen(QColor("#009af7")));
    p.setBrush(QBrush(QColor("#009af7")));
    QPolygon pol;
    pol<<QPoint(width()/2,72)<<QPoint(width()/2-17,103)<<QPoint(width()/2+16,103);
    p.drawPolygon(pol);
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker-02-镜像项目部署

Docker-02-镜像&项目部署 文章目录 Docker-02-镜像&项目部署一、镜像①&#xff1a;镜像结构②&#xff1a;Dockerfile③&#xff1a;构建镜像01&#xff1a;构建02&#xff1a;查看镜像列表03&#xff1a;运行镜像 二、网络①&#xff1a;容器的网络IP地址②&#xff…

【动态规划】【二分查找】【C++算法】730. 统计不同回文子序列

作者推荐 【动态规划】【数学】【C算法】18赛车 涉及知识点 动态规划 二分查找 LeetCode730. 统计不同回文子序列 给你一个字符串 s &#xff0c;返回 s 中不同的非空回文子序列个数 。由于答案可能很大&#xff0c;请返回对 109 7 取余 的结果。 字符串的子序列可以经由…

PGSQL主键序列

PostgreSQL和 MySQL数据库还是有一定的区别。 下面了解一下 PGSQL的主键序列。 一、主键 1、系统自带主键序列 在 PostgreSQL 中&#xff0c;GENERATED BY DEFAULT 和 GENERATED ALWAYS 是用于定义自动生成的列&#xff08;Generated Column&#xff09;的选项。一般可作用…

可达性分析

可达性分析 这个算法的基本思路就是通过 一系列称为“GC Roots”的根对象作为起始节点集&#xff0c;从这些节点开始&#xff0c;根据引用关系向下搜索&#xff0c;搜索过 程所走过的路径称为“引用链”&#xff08;Reference Chain&#xff09;&#xff0c;如果某个对象到GC …

数学建模--比赛

内容来自数学建模BOOM&#xff1a;【快速入门】北海&#xff1a;数模建模基础MATLAB入门论文写作数学模型与算法(推荐数模美赛国赛小白零基础必看教程)_哔哩哔哩_bilibili 目录 1.学习内容 2.参赛须知 1&#xff09;参赛作品的组成 2)参赛作品的提交 3.软件安装 4.注意…

Electron中苹果支付 Apple Pay inAppPurchase 内购支付

正在开发中&#xff0c;开发好了&#xff0c;写一个完整详细的过程&#xff0c;保证无脑集成即可 一、先创建一个App 一般情况下&#xff0c;在你看这篇文章的时候&#xff0c;说明你已经开发的app差不多了。 但是要上架app到Mac App Store&#xff0c;则要在appstoreconnect…

pyspark 笔记:窗口函数window

窗口函数相关的概念和基本规范可以见&#xff1a;pyspark笔记&#xff1a;over-CSDN博客 1 创建Pyspark dataFrame from pyspark.sql.window import Window import pyspark.sql.functions as F employee_salary [("Ali", "Sales", 8000),("Bob&qu…

UI自动化Selenium 无头模式运行

1、导入浏览器参数设置 from selenium.webdriver.chrome.options import Options 2、创建参数&#xff0c;并使用无厘头模式创建driver对象 opt Options() # 新建参数对象 opt.add_argument("--headless") # 无头 self.driver webdriver.Chrome(optionsopt) …

【数据结构】哈希表详解,举例说明 java中的 HashMap、HashTable及其区别

一、哈希表&#xff08;Hash Table&#xff09;简介&#xff1a; 哈希表是一种数据结构&#xff0c;用于实现字典或映射等抽象数据类型。它通过把关键字映射到表中的一个位置来实现快速的数据检索。哈希表的基本思想是利用哈希函数将关键字映射到数组的索引位置上&#xff0c;…

四款免费、易用的Docker漏洞扫描工具

本文向您介绍四种既可以扫描Docker镜像中的漏洞&#xff0c;又能够被轻松地集成到CI/CD中的四种免费实用工具。 基本原理 所有这些工具的工作原理都比较类似。它们使用的是如下两步流程&#xff1a; 生成软件物料清单(Software Bill of Materials&#xff0c;SBOM)。将SBOM与…

USB PHY for FPGA layout

https://blog.csdn.net/qq_41904778/article/details/123967670 ZYNQ7000内部没有USB PYH&#xff0c;我们通过USB 3320 PHY 芯片来连接FPGA 和外部的USB端口&#xff08;DP & DP-&#xff09;。USB 3320 PHY跟FPGA内部是t通过ULPI接口试下的&#xff0c;然后把数据转化为…

windows下编译报‘mutex‘ in namespace ‘std‘ does not name a type的解决方案

问题复述&#xff1a; windows下使用MinGW编译工程时&#xff0c;报如下错误&#xff1a; error: ‘mutex’ in namespace ‘std’ does not name a type error: ‘mutex’ is not a member of ‘std’ error: ‘mutex’ was not declared in this scope 问题分析&#xff…

C#,字符串匹配(模式搜索)Sunday算法的源代码

Sunday算法是Daniel M.Sunday于1990年提出的一种字符串模式匹配算法。 核心思想&#xff1a;在匹配过程中&#xff0c;模式串并不被要求一定要按从左向右进行比较还是从右向左进行比较&#xff0c;它在发现不匹配时&#xff0c;算法能跳过尽可能多的字符以进行下一步的匹配&…

跨域原理和解决方案

前置知识 什么是跨域 主要是由于浏览器的同源策略引起的&#xff0c;同源策略是浏览器的安全机制&#xff0c;当 协议&#xff0c;域名&#xff0c;端口 三者有一个不同&#xff0c;浏览器就禁止访问资源。 比如&#xff1a;http://www.company.com:80 http://www.company.…

chatgpt的实用技巧四temperature 格式

四、temperature 格式 GPT3.5 temperature 的范围为&#xff1a;0-0.7&#xff1b; GPT4.0 temperature 的范围为&#xff1a;0-1&#xff1b; 当 temperature 为 0 时候&#xff0c;结果可稳定。 当 temperature 为 0.7/1 时候&#xff0c;结果发散具备创力。 数值越大&a…

【动态规划】24子数组系列_最长湍流子数组_C++

题目链接&#xff1a;最长湍流子数组 目录 题目解析&#xff1a; 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析&#xff1a; 题目让我们求返回 arr 的 最大湍流子数组的长度 由题可得&#xff1a; 如果比较符号在子数组中的…

使用 ClassFinal 对SpringBoot jar加密加固并进行机器绑定

写在前面&#xff1a;各位看到此博客的小伙伴&#xff0c;如有不对的地方请及时通过私信我或者评论此博客的方式指出&#xff0c;以免误人子弟。多谢&#xff01;如果我的博客对你有帮助&#xff0c;欢迎进行评论✏️✏️、点赞&#x1f44d;&#x1f44d;、收藏⭐️⭐️&#…

告别繁琐配置!JVS低代码逻辑引擎让你轻松实现高效数据处理

在当今高度数字化的世界中&#xff0c;逻辑引擎作为数据处理和业务逻辑的核心组件&#xff0c;其重要性不言而喻。它不仅关乎企业数据的准确处理&#xff0c;还影响着业务决策的效率和准确性。为了确保逻辑引擎的正常运行和准确性&#xff0c;配置和测试环节显得尤为重要。 本…

【技术】MySQL数据读写分离怎么实现

、概念&#xff1a; MySQL数据读写分离是存储数据的一种服务架构执行select命令必须连接 slave角色服务器执行insert命令必须连接 maste角色服务器提供数据读写分离功能的中间件软件有&#xff1a; mysql-proxy maxscale mycat拓扑架构只支持一主一从或者一主多从架构 二、实…

Docker搭建MySQL主从数据库-亲测有效

1、测试环境概述 1、使用MySQL5.7.35版本 2、使用Centos7操作系统 3、使用Docker20版本 案例中描述了整个测试的详细过程 2、安装Docker 2.1、如果已经安装docker,可以先卸载 yum remove -y docker \ docker-client \ docker-client-latest \ docker-common \ docker-l…