C/C++ 测试Qt官网的模拟时钟示例

操作系统:UOS20专业版
qt环境安装:apt-get install qtcreator(会自动安装QtCreator编辑器及相关环境,新版qt似乎不再提供安装包)
qt版本:qt5.11

官网示例:
Analog Clock(Qt6.6版本的)
Qt5.11版本的模拟时钟代码(查看qt6.6版本对应的代码,然后在右上角切换版本)

项目创建

  1. 打开QtCreator编辑器。
  2. 文件->新建文件或项目->Application->Qt Widgets Application(因为只是做PC端UI,选这个就可以)
  3. 点击“choose”后设置好项目名和类名,完成后会自动创建基础文件(我的项目名和类名都是AnalogClock)。
  4. main.cpp和analogclock.cpp文件等都已经创建好,并main.cpp默认已经写好基础调用代码,所以只需修改analogclock.cpp和analogclock.h。
  5. 我的代码示例如下:

analogclock.h(只需添加函数声明):

#ifndef ANALOGCLOCK_H
#define ANALOGCLOCK_H#include <QWidget>namespace Ui {
class AnalogClock;
}class AnalogClock : public QWidget
{Q_OBJECTpublic:explicit AnalogClock(QWidget *parent = nullptr);~AnalogClock();private:Ui::AnalogClock *ui;
protected:void paintEvent(QPaintEvent *event) override; // 只添加了这个方法声明
};#endif // ANALOGCLOCK_H

analogclock.cpp(在原基础上添加了秒针)

#include "analogclock.h"
#include "ui_analogclock.h"
#include <QtWidgets>; // 新增行:添加头,解决QTimer缺失问题AnalogClock::AnalogClock(QWidget *parent) :QWidget(parent),ui(new Ui::AnalogClock)
{ui->setupUi(this);QTimer *timer = new QTimer(this);// 将超时信号连接到update()槽函数,此函数会导致重新渲染,重新渲染会调用paintEvent(QPaintEvent *)connect(timer, SIGNAL(timeout()), this, SLOT(update()));// 设置超时时间为1000毫秒timer->start(1000);setWindowTitle(tr("Analog Clock"));resize(200, 200);
}
// 触发绘制事件时执行此函数,如最大化等
void AnalogClock::paintEvent(QPaintEvent *)
{// 设置三个坐标点,用于绘制三角形的指针static const QPoint hourHand[3] = {QPoint(7, 8),QPoint(-7, 8),QPoint(0, -40)};static const QPoint minuteHand[3] = {QPoint(7, 8),QPoint(-7, 8),QPoint(0, -70)};static const QPoint secondHand[3] = { // 新增部分:绘制秒针的参数QPoint(3, 10),QPoint(-3, 10),QPoint(0, -90)};QColor hourColor(127, 0, 127);QColor minuteColor(0, 127, 127, 191); // RGBA,第四个是透明度QColor secondColor(255, 0, 0, 200); // 新增行:秒针颜色// 选取最小边长int side = qMin(width(), height());QTime time = QTime::currentTime();QPainter painter(this);// 设置渲染提示为:抗锯齿painter.setRenderHint(QPainter::Antialiasing);// 移动坐标原点到页面中心painter.translate(width()/2, height()/2);// 设置页面横纵缩放的比例因子。(因为默认绘制的表盘基本是200 * 200的大小,所以这里除以200)painter.scale(side/200.0, side/200.0);painter.setPen(Qt::NoPen); // 设置画笔为无色,从而隐藏边框painter.setBrush(hourColor); // 设置填充颜色painter.save(); // 保存此时的绘图参数状态,之后调用painter.restore();来恢复到此状态painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0))); // 设置绘图坐标的偏转角painter.drawConvexPolygon(hourHand, 3); // 绘制多边形,3则为3边形painter.restore(); // 恢复到之前painter.save();时的绘图参数状态,但保存点不能重复恢复painter.setPen(hourColor);for (int i = 0; i < 12; ++i) {painter.drawLine(88, 0, 96, 0); // 画一个坐标为(88, 0), (96, 0)的横线painter.rotate(30.0); // 偏转角度,循环后正好回原位}painter.setPen(Qt::NoPen);painter.setBrush(minuteColor);painter.save();painter.rotate(6.0 * (time.minute() + time.second() / 60.0));painter.drawConvexPolygon(minuteHand, 3);painter.restore();painter.setPen(minuteColor);for (int j = 0; j < 60; ++j) {if ((j % 5) != 0)painter.drawLine(92, 0, 96, 0);painter.rotate(6.0);}// 新增部分:以下为绘制秒针painter.setPen(Qt::NoPen);painter.setBrush(secondColor);painter.rotate(6.0 * time.second());painter.drawConvexPolygon(secondHand, 3);
}
AnalogClock::~AnalogClock()
{delete ui;
}

效果图:

在这里插入图片描述

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

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

相关文章

BOOT电路

本质&#xff1a;BOOT电路本质上是单片机的引脚 作用&#xff1a;BOOT电路的作用是用于确定单片机的启动模式 使用方法&#xff1a;在单片机上电或者复位时给BOOT管脚设置为指定电平即可将单片机设置为指定启动模式。 原理&#xff1a;单片机上电或复位后会先启动内部晶振&a…

【Go语言】Go语言中的数组

Go语言中的数组 1 数组的初始化和定义 在 Go 语言中&#xff0c;数组是固定长度的、同一类型的数据集合。数组中包含的每个数据项被称为数组元素&#xff0c;一个数组包含的元素个数被称为数组的长度。 在 Go 语言中&#xff0c;你可以通过 [] 来标识数组类型&#xff0c;但…

【IO流】字符流练习(拷贝、文件加密、修改文件数据)

字符流练习 练习1&#xff1a;文件夹拷贝1.1 需求1.2 代码实现1.3 输出结果 练习2&#xff1a;文件加密与解密2.1 需求2.2 代码实现2.3 输出结果 练习3&#xff1a;修改文件数据&#xff08;常规方法&#xff09;3.1 需求3.2 代码实现3.3 输出结果 练习4&#xff1a;修改文件数…

YOLO目标检测——斑马线目标检测数据集【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;自动驾驶系统、智能交通监控、行人保护系统、辅助驾驶功能数据集说明&#xff1a;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(xml)、coco(json)和yolo…

Window系统安装USB Redirector结合cpolar实现远程访问本地USB设备

文章目录 前言1. 安装下载软件1.1 内网安装使用USB Redirector1.2 下载安装cpolar内网穿透 2. 完成USB Redirector服务端和客户端映射连接3. 设置固定的公网地址 前言 USB Redirector是一款方便易用的USB设备共享服务应用程序&#xff0c;它提供了共享和访问本地或互联网上的U…

aiohttp 目录遍历漏洞(CVE-2024-23334)

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

MSSQL渗透测试

目录 mssql数据库连接提权至服务器权限 拿到目标的IP地址&#xff0c;我们先对IP地址进行信息收集&#xff0c;收集信息资产&#xff0c;同时使用nmap对IP地址进行扫描 nmap -sC -sV IP从扫描的结果中&#xff0c;我们能知道目标服务器是windows操作系统&#xff0c;使用的是m…

iOS群控软件功能分析与代码分享!

随着移动互联网的迅猛发展&#xff0c;iOS设备作为市场上一大主流平台&#xff0c;其应用开发和管理越来越受到开发者和企业的重视&#xff0c;iOS群控软件&#xff0c;作为一种能够批量控制、管理和监控iOS设备的工具&#xff0c;逐渐展现出其强大的实用价值。 本文将详细分析…

Redis的高性能之道

前言&#xff1a;做码农这么多年&#xff0c;我也读过很多开源软件或者框架的源码&#xff0c;在我看来&#xff0c;Redis是我看过写得最优美、最像一件艺术品的软件&#xff0c;正如Redis之父自己说的那样&#xff0c;他宁愿以一个糟糕的艺术家身份而不是一名好程序员被别人记…

CrossOver2024电脑虚拟机软件详细介绍概述

CrossOver是由CodeWeavers开发的一款系统兼容软件&#xff0c;它能够在Mac和Linux操作系统上直接运行Windows应用程序&#xff0c;而无需创建或启动完整的Windows虚拟机。CrossOver通过模拟Windows应用程序所需的运行环境&#xff0c;实现了跨平台的无缝集成和高效运行。 Cross…

免费的Git图形界面工具sourceTree介绍

阅读本文同时请参阅-----代码库管理工具Git介绍 sourceTree是一款免费的Git图形界面工具&#xff0c;它简化了Git的使用过程&#xff0c;使得开发者可以更加方便地下载代码、更新代码、提交代码和处理冲突。下面我将详细介绍如何使用sourceTree进行这些操作。 1.下载和…

非线性优化-高斯牛顿法

在SLAM领域&#xff0c;后端多采用基于非线性优化的方法&#xff0c;来优化位姿和地图点&#xff0c;其中高斯牛顿法的使用频率很高。 求解高斯牛顿法的核心公式&#xff1a; 其中 f 是误差函数&#xff0c;J是误差关于待优化变量的雅可比矩阵。 其中H为海森矩阵&#xff08…

雷赛控制卡的扩展IO在雷赛软件里连不上是什么问题

雷赛控制卡的扩展IO在雷赛软件里连不上是什么问题 解决: 要拨码的,拨了码&#xff0c;记得断电

Redis之一: 简介及环境安装搭建

什么是NoSQL? NoSQL&#xff0c;指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写&#xff0c;是对不同于传统的关系型数据库的数据库管理系统的统称。 NoSQL用于超大规模数据的存储。&#xff08;例如谷歌或Facebook每天为他们的用户收集万亿比特的数据&#xf…

Sentinel实战(待完善)

目录 服务雪崩 什么是服务雪崩 服务不可用原因 解决方案 技术选型对比 Sentinel 介绍 优点 核心概念 资源 规则 代码实战 API实现 SentinelResource注解埋点实现 服务雪崩 什么是服务雪崩 在服务调用链路中, 服务提供者不可用, 导致服务调用者不可用, 间接让上上游…

【Java EE初阶二十六】简单的表白墙(二)

2. 后端服务器部分 2.1 服务器分析 2.2 代码编写 2.2.2 前端发起一个ajax请求 2.2.3 服务器读取上述请求,并计算出响应 服务器需要使用 jackson 读取到前端这里的数据,并且进行解析&#xff1a; 代码运行图&#xff1a; 2.2.4 回到前端代码&#xff0c;处理服务器返回的响应…

【网站项目】424学报稿件管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

【漏洞复现】大华智慧园区综合管理平台信息泄露漏洞

Nx01 产品简介 大华智慧园区综合管理平台是一款综合管理平台&#xff0c;具备园区运营、资源调配和智能服务等功能。该平台旨在协助优化园区资源分配&#xff0c;满足多元化的管理需求&#xff0c;同时通过提供智能服务&#xff0c;增强使用体验。 Nx02 漏洞描述 大华智慧园区…

Python多功能课堂点名器、抽签工具

一、问题缘起 去年&#xff0c;ChatGPT浪潮袭来&#xff0c;我懂简单的Python基础语法&#xff0c;又有一些点子&#xff0c;于是借助于人工智能问答工具&#xff0c;一步一步地制作了一个点名器&#xff0c;也可以用于抽签。当时&#xff0c;我已经设计好页面和基础的功能&am…

通过QScrollArea寻找最后一个弹簧并且设置弹簧大小

项目原因&#xff0c;最近需要通过QScrollArea寻找其中最后一个弹簧并且设置大小和策略&#xff0c;因为无法直接调用UI指针&#xff0c;所以只能用代码寻找。 直接上代码&#xff1a; if (m_scrollArea){int iScrollWidth m_labelSelectedTitle->width();m_scrollArea-&g…