zoukankan      html  css  js  c++  java
  • Day03 (上)_Qt绘图和绘图设备

    一、QPainter

     

    QT的绘图系统基于QPainter、QPainterDeive和QPainterEngine三个类,Qpainter可以视为画家,包含用来执行的操作的函数,QpainterDevice可以视为画板,是一个二维空间的抽象,允许QPainter在上面绘制,即为QPainter的工作空间。QpainterEngine提供了画笔Painter在不同的二维空间上的操作接口。

    Qt的绘图系统实际上是使用QPainter在不同的QpainterDevice上进行绘制,他们之间使用QpainterEngine进行中间通信。

    以在QpainterDevice上绘制背景图为例,在栈上定义一个QPainter对象,指定QPainter类的操作窗口为界面:

    QPainter接收一个QpainterDevice指针作为参数。

    程序实现中,首先定义一个画家QPainter,然后指定画家的操作空间为this,即当前窗口,画家执行的操作为绘图,所以使用p.drawPixmap()函数,前两个参数为图像的起始位置,接下来的两个参数调用width、height函数调用当前窗口的大小,最后一个参数为图像的地址。

     

    运行结果为:

     

    当QPainter想在绘图空间上划线、绘制图形时,需要再定义一个一个画笔,可以设置画笔的宽度、线条类型、画笔颜色等属性。在画笔属性设置完毕后将画笔移交给QPainter进行绘制,顺序反了的话不起作用。

     

    运行结果为:

     

    对于区域性绘图,可以使用画刷操作,通过设置画刷的颜色和风格可以可以设置区域性显示样式:

     

    运行结果为:

     

    可以看到一个button按钮,可以用来做刷新,比如一张图片,每次按键按下,图片位置刷新一次,刷新使用的函数为update()函数,在按键的槽函数中定义,每次按键点击横坐标自加20,然后刷新位置。

    二、 绘图设备

    绘图设备指的是继承于QpainterDevice的子类,该类一共有四种,分别问QPixmap、QBitmap、QImage、QPicture四种。

    四种类型的区别

    (1)、QPixmap:专门为图像在屏幕上显示做了优化

    (2)、QBitmap:是QPixmap的一个子类,色深限定为1,只能显示黑白

    (3)、QImage:专门为图像的像素级别操作访问做了优化

    (4)、QPicture:可以记录和重现QPainter的各种操作

    2.1、QPixmap:

    见(一)。

    2.2、QBitmap:

    QBitmap继承于QPixmap,具有Qpixmap的所有特性,但是仅提供单色图像,显示只有黑白两色的图像数据,由于色深小,所以只占用很小的存储空间。

    以一个同一文件在QPixmap和QBitmap下的不同表现说明:

    代码中使用的新显示方式为:先定义一个相应类型的变量,然后将图像地址通过load()函数进行加载

     

    运行结果:

     

    2.3、QImage:

    QImage主要是为图像I/O、图片访问和像素修改设计的,独立于硬件平台,可以在线程中进行绘制

     

    运行结果:

     

    2.4、QPicture:

    Qpicture是一个可以记录和重现QPainter命令的绘图设备,Qpicture将QPainter的命令序列化到一个IO设备,保存为一个平台的独立文件格式,这种格式是二进制的,与平台无关。

     

    文件显示:

     

  • 相关阅读:
    EasyNetQ使用(八)【对延迟消息插件的支持,自动订阅者】
    EasyNetQ使用(七)【发布者确认 ,用Future Publish发布预定中事件 】
    EasyNetQ使用(六)【多态发布和订阅,消息版本控制】
    EasyNetQ使用(五)【基于主题的路由,控制队列名称】
    EasyNetQ使用(四)【Request与Response,Send与Receive】
    可伸缩系统的架构经验
    Stack Exchange 的架构
    Quora使用到的技术
    Digg工程师讲述Digg背后的技术
    由12306.cn谈谈网站性能技术
  • 原文地址:https://www.cnblogs.com/luxinshuo/p/12237638.html
Copyright © 2011-2022 走看看