简介

在这个例子中我们开始画一个蓝色可爱的小加农炮。

lcdrange.h包含LCDRange类定义
lcdrange.cpp包含LCDRange类实现
cannon.h包含CannonField类定义
cannon.cpp包含CannonField类实现
main.cpp包含MyWidget和main

cannon.cpp

void CannonField::paintEvent(QPaintEvent *)
{QPainter p(this); //创建操作窗口部件的QPaonterp.setBrush(Qt::blue);p.setPen(Qt::NoPen);p.translate(0, rect().bottom());p.drawPie(QRect(-35, -35, 70, 70), 0, 90*16); //绘制由(x,y,w,h)确定的饼图,开始角度为0,弧长为90*16(四分之一圆)p.rotate(-angle); // 将坐标系统逆时针旋转-anglep.drawRect(QRect(33, -4, 15, 8)); //根据(x,y,w,h)画矩形
}

QPainter p(this);
我们现在开始认真地使用 QPainter。我们创建一个绘画工具来操作这个窗口部件。

p.setBrush(Qt::blue);
当一个 QPainter 填满一个矩形、圆或者其它无论什么,它会用它的画刷填满这个图形。这里我们把画刷设置为蓝色。(我们也可以使用一个调色板。)

p.setPen(Qt::NoPen);
并且 QPainter 使用画笔来画边界。这里我们设置为 NoPen,就是说我们在边界上什么都不画,蓝色画刷会在我们画的东西的边界内画满全部。

p.translate(0, rect().bottom());
QPainter::translate()函数转化 QPainter 的坐标系统,比如,它通过偏移谅来移动。这里我们设置窗口部件的左下角为(0,0)。x 和 y 的方向没有改变,比如,窗口部件中的所有 y 坐标现在都是负数(请看坐标系统获得有关 Qt 的坐标系统更多的信息。)

p.drawPie(QRect(-35, -35, 70, 70), 0, 90*16);
drawPie()函数使用一个开始角度和弧长在一个指定的矩形内画一个饼型图。角度的度量用的是一度的十六分之一。零度在三点的位置。画的方向是顺时针的。这里我们在窗口部件的左下角画一个四分之一圆。这个饼图被蓝色充满,并且没有边框。

p.rotate(-angle);
QPainter::rotate()函数绕 QPainter 坐标系统的初始位置旋转它。旋转的参数是一个按度数给定的浮点数(不是一个像上面那样给的十六分之一的度数)并且是顺时针的。这里我们顺时针旋转 ang 度数。

p.rotate(-angle);
QPainter::drawRect()函数画一个指定的矩形。这里我们画的是加农炮的炮筒。 很难想象当坐标系统被转换之后(转化、旋转、缩放或者修剪)的绘画结果。

在这种情况下,坐标系统先被转化后被旋转。如果矩形 QRect(33, -4, 15, 8)被画到这个转化后的坐标系统中,它看起来会是这样:

注意矩形被 CannonField 窗口部件的边界省略了一部分。当我们选装坐标系统,以 60 度为例,矩形会以(0,0)为圆心被旋转,也就是左下角,因为我们已经转化了坐标系统。结果会是这样:

main.cpp

int main(int argc, char *argv[])
{QApplication::setColorSpec(QApplication::CustomColor);QApplication a(argc, argv);MyWidget w;w.show();return a.exec();
}

我们做完了,除了我们还没有解释为什么 Windows 在这个时候没有发抖。

我们告诉 Qt 我们在这个程序中想使用一个不同的颜色分配策略。这里没有单一正确的颜色分配策略。因为这个程序使用了不常用的黄色,但不是很多颜色,CustomColor 最好。这里有几个其它的分配策略,你可以在QApplication::setColorSpec()文档中读到它们。

通常情况下你可以忽略这一点,因为默认的是好的。偶尔一些使用常用颜色的应用程序看起来比较糟糕,因而改变分配策略通常会有所帮助。

设置一个不同的画笔代替NoPen
设置成红色边框:

p.setPen(Qt::red);


设置一个调色板的画刷

setAutoFillBackground(true);
QPalette palette;
palette.setBrush(QPalette::Active,QPalette::Window,QBrush(Qt::darkMagenta));
setPalette(palette);

Qt4_你可以使用加农炮了相关推荐

  1. sql server

    sql server 作者:Sanle  来源:博客园  发布时间:2006-04-27 13:06  阅读:3402 次  原文链接   [收藏]   1.清空日志:DUMP TRANSACTION ...

  2. 关于KN95口罩:可以使用多久?要不要呼吸阀?怎么佩戴?

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 来源 | 哆来咪咪 再说一遍:一定要戴口罩! 冠状病毒在人与人之间传播,通常是在某人接触到感染者的分泌物的时候.病毒的传染力 ...

  3. 绘制图形可以使用什么python数据库_用Matplotlib如何绘制3D图形

    Matplotlib是一个Python 2D绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形. 在上篇中讲述的是如何对图形颜色和线条的填充,而今天给大家带来的是用matp ...

  4. 不需要懂得编程,但却可以使用ggplot2画出论文级别的图?

    你有没有遇到过这样的烦恼,你需要画一些论文级别的图,并且你知道R中的ggplot2是一个很好的选择,可以画出符合你要求的图.但是由于你不熟悉ggplot2的使用,你需要上网倒弄一番,了解与你图相关的代 ...

  5. 获取本地 qt_好消息,可以使用 VS 进行 Qt 的跨平台开发啦!

    来自公众号:高效程序员 官宣了~ 在即将发布(定于今年夏天)的 Qt VS Tools 中,将增加对 Visual Studio Linux 项目的支持.也就是说,以后可以使用 VS 进行 Qt 的跨 ...

  6. 设计所需的各种输出格式(包括整数、实数、字符串等),用一个文件名format.h把这些信息都包括到此文件内,另编写一个文件,用文件包含命令验证可以使用这些格式

    <程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p241 习题7 16.设计所需的各种输出格式(包括整数.实数.字符串等),用一个文件名"fo ...

  7. 从文本中提取知识图谱代码比较好的,代码对齐,可以使用的

    从文本中提取知识图谱代码比较好的,代码对齐,可以使用的 https://blog.csdn.net/fendouaini/article/details/102987373 https://blog. ...

  8. SAP 没有激活HUM功能照常可以使用Handling Unit

    SAP 没有激活HUM功能照常可以使用Handling Unit 笔者所在的项目上的公司间STO的流程里,发货公司在做PGI之后系统自动触发收货公司的inbound delivery单据,发货公司发出 ...

  9. 修改linux的时间可以使用date指令

    修改linux的时间可以使用date指令在命令行输入:date 显示当前时间 [root@localhost ~]# date 2011年 05月 16日 星期一 10:04:38 CSTdate - ...

最新文章

  1. oracle十六进制转数字,16进制如何转化为10进制?
  2. Rank() over()的用法
  3. Drug Target Review | 筛选用于抗COVID-19的抗病毒化合物
  4. Java注解学习笔记
  5. 速卖通运营之选品方法和技巧
  6. 在Visual Studio 2005中安装Qt 4.3.2
  7. 1050 String Subtraction (20 分)_10行代码AC
  8. MYSQL 表 部分数据导出、导入
  9. php---遍历一个数组获得一个新的数据结构
  10. Spring StringUtils类中几个有用的字符串处理方法
  11. iOS之UI--CAShapeLayer
  12. java就业班学什么呀_传智播客JAVA就业班的学习心得
  13. DirectShow介绍
  14. 计算机一级如何添加对角线,word中如何在单元格中添加对角线
  15. 迄今为止最优秀的配色R包
  16. 渠道分析 之 渠道分析的价值 -3
  17. 2.3 数据库-深入理解
  18. 官方文档 恢复备份指南一 恢复备份介绍
  19. 防火墙——防火墙基础知识
  20. 智云通CRM:销售的黄金法则,尊重客户的意见

热门文章

  1. MIT6.830 lab4 SimpleDB Transactions 实验报告
  2. sam卡和sim卡区别_SAM卡槽是不是和SIM卡槽是一个东西,有高人知道么?
  3. linux 按键驱动中断 rockchip_嵌入式linux快速入门(转载)
  4. ros openwrt 分流_常平:推进“截污大会战”补贴助力企业雨污分流
  5. c语言编程获取摄像头图像,OpenCV 获取摄像头图像数据并显示
  6. axis在matlab中是什么意思_珠宝首饰上的钢印是什么意思呢?你都知道吗
  7. 海康威视面试-java应用开发
  8. H3C 典型数据链路层标准
  9. Python机器学习(Sebastian著 ) 学习笔记——第五章通过降维压缩数据(Windows Spyder Python 3.6)...
  10. Linux磁盘分区/格式化/挂载目录