小诸葛080

Qt 绘图设备

本文引用自http://blog.chinaunix.net/uid-24219701-id-4044432.html

QPaintDevice类是实际的绘制设备的基类.QPainter能够在QPaintDevice子类上进行绘制,如QWidget,QImage,QPixmap,QGLWidget,QGLPixelBuffer,QPicture,QPrinter
QSvgGenerator.要实现自己的绘图设备,必须从QPaintDevice类继承并实现其虚函数QPaintDevice::paintEngine()以告之QPainter能够在这个特定的设备上绘制图形,同时还需要从
QPaintEngine类继承自定义的图形绘制引擎。

1 QWidget
QWidget是所有用户界面元素的基类,窗口部件时用户界面的原子元素,他接受鼠标,键盘,窗口系统的其他事件并在屏幕上绘制自己。
2 QImage

QImage优化了I/O操作,可以直接 存取操作像素数据。

QImage类提供了与硬件无关的图像表示,它为直接操作像素提供优化,QImage支持单色,8-bit,32-bit和alpha混合图像,使用QImage的优点在于可以获得平台无关的绘制操作,另外还有一个好处时图像可以不必在GUI线程中处理。

3 QPixmap
QPixmap主要用来在屏幕上显示图像。
QPixmap时后台显示的图像,它为在屏幕上显示图像提供优化,不同于QImage,pixmap的图像数据用户不可见,而且由底层窗口系统管理,为了优化QPixmap图像,Qt提供了QPixmapCache类来存储临时的pixmap.Qt还提供了QPixmap的继承类QBitmap类,QBitmap表示单色的pixmap,主要用来创建自定义的QCursor和QBrush对象,构造QRegion对象,设置pixmap和窗口部件的掩码。

4 OPenGLWidget
Qt提供了QtOpenGL模块来实现OpenGL操作,QGLWidget允许使用OpenGL API进行绘制。同时QGLWidget时QWidget的子类,因此QPainter也可以在上面绘制。这样可以使Qt能够利用OpenGl完成绘制操作,如变换和绘制pixmap

5 pixel Buffer
QGLPixelBuffer从QPaintDevice继承,封装了OpenGL pbuffer.使用pbuffer绘制通常时全硬件加速,这比使用QPixmap绘制更为迅速。

6 FrameBuffer
QGLFrameBufferObject从QPaintDevice继承,QGLFrameBufferObject封装了OpenGL frameBuffer对象,FrameBuffer对戏那个用来实现后台屏幕绘制,比pixel buffer更好一些。
7 picture
QPicture类时能够记录和重演QPainter命令的绘图设备,picture串行化painter的命令为平台无关的格式,QPicture同时也于分辨率无关,如QPicuture能够在不同的设备上(svg,pdf,ps打印机和屏幕)有一只的显示。QPicture::load()和QPicture::save()函数分别完成载入和存储图像。

8 Printer
QPrinter 类时在打印机上绘制的绘图设备,在Windows和MAC OS X上,QPrinter使用内建的打印机驱动程序,在X11上,QPrinter山城postscript代码并发送给lpr,lp或者其他打印程 序,QPrinter可以在任意其他QPrintEngine对象上打印,也可以直接生成PDF文件。
QPrintEngine类定义了QPrinter如何和其他打印机系统交互的接口,主要创建自己的打印引擎时,可以从QPaintEngine和QPaintEngine上继承。

posted on 2015-03-30 20:17  小诸葛080  阅读(454)  评论(0编辑  收藏  举报

导航