Qt绘图2

Qt的绘图设备只能是QPaintDevice的子类,在Qt5中,继承自它的有:QWidget、QImage、QPixmap、QGLFramebufferObject、QPicture、QPrinter,还有继承自Qwidget的QGLWidget。

简单来说,QPixmap专门为图像在屏幕上的显示做了优化,QBitmap是QPixmap的子类,但是只能显示黑白图片,可以通过QPixmap的isQBitmap() 来确定是否该QPixmap是QBitmap。QImage专门为图像的像素级访问做了优化。QPicture则可以记录和重现QPainter的各条指令。

QPixmap继承了QPaintDevice,所以可以使用QPainter在上面绘图。QPixmap也可以接受一个字符串作为文件的路径来显示图片。使用QPainter:: drawPixmap()可以把文件绘制到一个QLabel、或者继承了QAbstractButton(如:QPushButton、QToolButton)上面。QLabel有一个pixmap属性,QAbstractButton有一个icon属性。QPixmap可以使用传值的方式,因为Qt已经为它实现了隐式数据共享。

QBitmap继承自QPixmap,但是QBitmap的色深为1,也就是每个像素用一个二进制位表示。可以保证绘制的图像为黑白两色,且占用内存很小。The QBitmap class is a monochrome off-screen paint device used mainly for creating custom QCursor and QBrush objects, constructing QRegion objects, and for setting masks for pixmaps and widgets.

QImage最大特色在于可以对像素进行快速操作,因此比较适合用于图像处理。The QImage class provides a hardware-independent image representation that allows direct access to the pixel data, and can be used as a paint device.

QPicture类是用于记录和重播QPainter命令的类,它以一个独立于平台的格式序列化QPainter的命令到一个IO device中,有时候他们也可以作为meta-files. QPicture使用了二进制格式的属性,不像Windows上的很多本地的图像格式,Qt picture对于他们的内容没有限制。任何可以被绘制到widget 或者 pixmap东西(如字体、pixmap、region、transformed graphics等)都可以存储到一个图像中。
QPicture是与分辨率无关的,这意味着QPicture可以在不同设备上看起来都一样。举个例子吧:

void PaintWidget::paintEvent(QPaintEvent *)
{
    QPicture picture;
    QPainter painter;
    painter.begin(&picture);           // paint in picture
    painter.drawEllipse(10,20, 80,70); // draw an ellipse
    painter.end();                     // painting done
    picture.save("drawing.pic");       // save picture
    myPaint();
}

void PaintWidget::myPaint()
{
    QPicture picture;
    picture.load("drawing.pic");           // load picture
    QPainter painter;
    painter.begin(this);               // paint in myImage
    painter.drawPicture(0, 0, picture);    // draw the picture at (0,0)
    painter.end();
}

你会发现有一个drawing.pic文件保存在本地了,它记录了从painter.begin()到painter.end()之间的对于painter的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值