您现在的位置是:首页 > 正文

【Qt官方例程学习笔记】Analog Clock Window Example (画笔的平移/旋转/缩放应用)...

2024-02-29 11:18:20阅读 0

这个例子演示了如何使用QPainter的转换和缩放特性来简化绘图。

值得学习的:

定时器事件ID检查:

在定时器事件中检查定时器id是比较好的实践。

QPainter抗锯齿:

We call QPainter::setRenderHint() with QPainter::Antialiasing to turn on antialiasing. This makes drawing of diagonal lines much smoother.

画笔的平移/缩放:

      p->translate(width() / 2, height() / 2);

      int side = qMin(width(), height());
      p->scale(side / 200.0, side / 200.0);

这段代码中, p是一个QPainter实例,使用translate()将画笔移动到中心点,然后通过scale将画笔以200*200的尺寸为基准缩放(比如绘图区域大小是400*400,则缩放因子为2。这样就是绘制的时候,大小固定为200*200,绘制后,缩放到400*400).

画笔的轮廓和填充:

      p->setPen(Qt::NoPen);
      p->setBrush(hourColor);

画笔状态的保存和恢复,旋转,绘制多边形:

      QTime time = QTime::currentTime();

      p->save();
      p->rotate(30.0 * ((time.hour() + time.minute() / 60.0)));
      p->drawConvexPolygon(hourHand, 3);
      p->restore();

这段代码,通过save和restore,还原了旋转之前的画笔的变换矩阵,后面的绘制不会被这次旋转所影响。

 

 

 

 

转载于:https://www.cnblogs.com/pplxlee/p/11009539.html

网站文章

  • oracle 查找特定字符,Oracle截取字符串和查找字符串,联合使用截取特定字符

    oracle 截取字符(substr),检索字符位置(instr) case when then else end语句使用 收藏常用函数:substr和instr1.SUBSTR(string,start_position,[length]) 求子字符串,返回字符串解释:string 元字符串start_position 开始位置(从0开始)length 可选项,子字符串的个数For e...

    2024-02-29 11:17:50
  • python 爬虫爬小说

    python 爬虫爬小说

    https://blog.csdn.net/c406495762/article/details/78123502# -*- coding:UTF-8 -*-import requestsimport sysfrom bs4 import BeautifulSoupif __name__ == '__main__': head_url = 'https://www.biq...

    2024-02-29 11:17:42
  • js中的this机制

    概念this是函数 ( 运行时,即指的是被调用时 )的上下文, 指向调用它的 (最近的上下文)。绑定规则函数绑定new绑定箭头函数绑定1.函数调用JS(ES5)里面有三种函数调用形式: func(p1, p2) obj.child.method(p1, p2) func.call(context, p1, p2) // 先不讲 apply复制代码一般,初学者都知...

    2024-02-29 11:17:33
  • 【css实现table斜线表头】

    【css实现table斜线表头】

    【css实现table斜线表头】

    2024-02-29 11:17:03
  • Laravel + Laravel-admin 搭建网站后台

    Laravel + Laravel-admin 搭建网站后台

    本地环境: laravel版本: laravel-admin版本: laravel-admin优秀扩展包!! 一、安装配置Laravel6.11.0 1.安装 composer create-project --prefer-dist laravel/laravel blog 2.改时区 'timezone' => 'PRC' 3.改语言 ...

    2024-02-29 11:16:55
  • WebSocketConfigurationSupport$NoOpScheduler.schedule

    项目中使用了WebSocket进行消息的推送,同时又使用了定时器Scheduled进行定时执行操作,这两者同时使用抛出异常。java.lang.IllegalStateException: Unexp...

    2024-02-29 11:16:48
  • android中的TextView组件,Android控件之TextView全解析

    android中的TextView组件,Android控件之TextView全解析

    前言大家好!在前几篇文章里,我们详细介绍了Android中的常用布局,使大家对Android中的页面布局有了一定认识,而对于布局中使用的一些UI控件如Button、TextView等,有的读者可能还存...

    2024-02-29 11:16:19
  • .NET 面试题 - 初级&中级

    初级.NET开发人员 - 任何使用.NET的人都应知道的 1. 描述线程与进程的区别? 进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在。进程可以定义程序的...

    2024-02-29 11:16:10
  • Mysql基础 — DDL、DML、DQL、DCL、函数、约束

    Mysql基础 — DDL、DML、DQL、DCL、函数、约束

    编号(纯数字)员工工号 (字符串类型,长度不超过10位)员工姓名(字符串类型,长度不超过10位)性别(男/女,存储一个汉字)年龄(正常人年龄,不可能存储负数)身份证号(二代身份证号均为18位,身份证中有X这样的字符)入职时间(取值年月日即可)

    2024-02-29 11:16:04
  • el-table 鼠标悬浮时背景色改变

    el-table 鼠标悬浮时背景色改变

    el-table 鼠标悬浮时改变背景色

    2024-02-29 11:15:30