31 绘图设备

该文展示了在Qt中如何使用QWidget、QPixmap、QImage和QPicture作为绘图设备。文中通过代码示例说明了如何填充颜色、绘制椭圆并保存结果,还演示了QPicture如何记录和重现画家的绘图指令。
摘要由CSDN通过智能技术生成

常用绘图设备:

  • QWidget
  • QPixmap
  • QBitmap
  • QImage
  • QPicture

 代码:

//widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

    //利用Image访问像素点
    void paintEvent(QPaintEvent *);

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H
//widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include "QPainter"
#include "QPicture"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    //QPixmap做绘图设备,对不同平台做了显示优化
    QPixmap pix(300,300);
    pix.fill(Qt::white);
    QPainter painter(&pix);
    painter.setPen(QPen(Qt::green));
    painter.drawEllipse(QPoint(150,150),100,100);
    pix.save("D:\\QT\\QtProjects\\14_QPaintDevice\\pix.png");

    //QImage做绘图设备,专门为像素级访问做优化
    QImage img(300,300,QImage::Format_RGB32);
    img.fill(Qt::white);
    QPainter painter(&img);
    painter.setPen(QPen(Qt::green));
    painter.drawEllipse(QPoint(150,150),100,100);
    img.save("D:\\QT\\QtProjects\\14_QPaintDevice\\img.png");

    //QPicture做绘图设备  记录和重现画家的绘图指令
    QPicture pic;
    QPainter painter;
    painter.begin(&pic);

    painter.setPen(QPen(Qt::red));
    painter.drawEllipse(QPoint(150,150),100,100);

    painter.end();
    pic.save("D:\\QT\\QtProjects\\14_QPaintDevice\\pic.zt");//后缀名自定义,不影响

}

void Widget::paintEvent(QPaintEvent *){
    QPainter painter(this);
    QImage img;
    img.load(":/imgs/Luffy.png");
    for(int i=50;i<100;i++){
        for(int j=50;j<100;j++){
            QRgb val = img.pixel(j,i);
            img.setPixel(i,j,val);
        }
    }
    painter.drawImage(0,0,img);

    //重现QPicture的绘图
    QPainter painter(this);
    QPicture pic;
    pic.load("D:\\QT\\QtProjects\\14_QPaintDevice\\pic.zt");
    painter.drawPicture(0,0,pic);

}

Widget::~Widget()
{
    delete ui;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

让我看看谁在学习

你的鼓励是我创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值