绘图事件
画家
使用事件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);
保存你绘图的指令