XuSenfeng

个人站

复读了,更新随缘,有的文件不全或者图片缺失具体看我的笔记库(https://github.com/XuSenfeng/note)


绘图事件

目录

绘图事件

画家

使用事件paintEvent, 使用画家painter类

在画家事件中

void Widget::paintEvent(QPaintEvent *)
{
}
//实例化画家对象, 指定的是绘图的位置
QPainter painter(this);
//画线
painter.drawLine(QPoint(0, 0), QPoint(100,100));


//设置颜色
QPen pen(QColor(255,125, 125));
pen.setWidth(3);
pen.setStyle(Qt::DotLine);
painter.setPen(pen);

//画椭圆
painter.drawEllipse(QPoint(100, 100), 50, 50);
painter.drawRect(0, 0, 50, 100);
//画字
painter.drawText(QRect(10, 200, 100, 50), "我是傻逼=======");

可以使用画刷对封闭的图形进行填充

QBrush brush(QColor(0, 125, 255));
painter.setBrush(brush);

高级设置

    QPainter painter(this);
//    painter.drawEllipse(QPoint(100, 50), 50, 50);
//    //设置抗锯齿, 效率比较低
//    painter.setRenderHint(QPainter::Antialiasing);
//    painter.drawEllipse(QPoint(200, 50), 50, 50);

    //画一个矩形
    painter.drawRect(QRect(20, 20, 50, 50));
    //移动画家的起始位置
    //保存画家的状态
    painter.save();
    painter.translate(100,0);
    painter.drawRect(QRect(20, 20, 50, 50));

    //还原状态
    painter.restore();
    painter.drawRect(QRect(20, 20, 50, 50));

使用update()可以再次调用绘图函数

画图片

posX+=20;
painter.drawPixmap(posX, 20, QPixmap(":/avatar.png"));

设备

Qt的绘图实际上就是QPainter使用QPaintEngine在QPainDevice上画图

绘图设备是画家画图的对象

  • QPixmap: 专门为图象在屏幕上显示做了优化
  • QBitmap: 是QPixmap的一个子类, 色深设定为1, 画出的就是黑白两色
  • QImage: 专门为像素的访问做了优化
  • QPicture: 可以记录重现QPinter命令

窗口继承了绘图设备, 也可以直接进行画画

    QPixmap pix(300, 300);
    QPainter painter(&pix);
    painter.setPen(QPen(Qt::green));
    painter.drawEllipse(QPoint(150, 150), 100, 100);

    //保存
    pix.save("/home/jiao/qt/test.png");

画出来的背景是黑色的, 可以使用pix->fill进行填充, 为了不同的平台做出不同的优化

//    QImage img(300, 300, QImage::Format_ARGB32);
//    img.fill(Qt::white);

//    QPainter painter(&img);
//    painter.setPen(QPen(Qt::green));
//    painter.drawEllipse(QPoint(150, 150), 100, 100);
//    img.save("/home/jiao/qt/test.png");


QPainter painter(this);
//利用QImage对像素进行修改
QImage img;
img.load(":/avatar.png");
//修改像素
for(int i = 0; i < 100; i++)
{
    for(int j = 50 ; j < 100; j++)
    {
        QRgb value = qRgb(255, 0, 0);
        img.setPixel(i, j, value);
    }
}
painter.drawImage(0, 0, img);

可以对像素进行设置

QPicture pic;
QPainter painter;
//设置指令
painter.begin(&pic);

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

painter.end();
pic.save("/home/jiao/qt/test.jiao");


//重现指令
QPicture pic;
pic.load("/home/jiao/qt/test.jiao");
QPainter painter(this);
painter.drawPicture(0, 0, pic);

保存你绘图的指令