概述
目录
- 绘图事件
- 基本绘图
- 绘图高级设置
- 手动调用绘图事件
- 绘图设备
绘图事件
QT自带的绘图事件如下,一般需要我们自己重新实现它。
[virtual protected] void QWidget::paintEvent(QPaintEvent *event)
基本绘图
#include <QPainter>
void MainWindow::paintEvent(QPaintEvent *ev){
//实例画家对象,参数是指定绘图设备
QPainter painter(this);
//设置画笔
QPen pen(Qt::red);
//设置画笔宽度
pen.setWidth(1);
//设置画笔风格
pen.setStyle(Qt::DashLine);
//让画家使用这支笔
painter.setPen(pen);
//设置画刷
QBrush brush(Qt::cyan);
//设置画刷风格
brush.setStyle(Qt::Dense6Pattern);
//让画家使用画刷
painter.setBrush(brush);
//画线
painter.drawLine(QPoint(0,0),QPoint(100,100));
//画圆
painter.drawEllipse(QPoint(100,100),50,50);
//画矩形
painter.drawRect(QRect(20,20,50,50));
//画文字
painter.drawText(QRect(10,200,100,50),"hello,world!");
}
绘图高级设置
- 抗锯齿能力
QPainter painter(this);
painter.drawEllipse(QPoint(100,100),50,50);
//设置抗锯齿能力,效率会变低
painter.setRenderHint(QPainter::Antialiasing);
painter.drawEllipse(QPoint(200,100),50,50);
很明显增加抗锯齿能力的圆,其边线画的质量更加好。
- 移动画家
画家每一次画的坐标系都是不变的,可以使用下面的函数进行改变。
QPainter painter(this);
painter.drawEllipse(QPoint(100,100),50,50);
//移动画家
painter.translate(100,0);
painter.drawEllipse(QPoint(100,100),50,50);
- 保存画家状态并还原
painter.save();
painter.restore();
手动调用绘图事件
前面我们知道,重写paintEvent的函数,QT运行时会自动调用这个事件,如果我们后面还想再次调用这个事件,怎么办呢?
- 图片自动平移案例
QTimer *ti = new QTimer(this);
connect(ti,&QTimer::timeout,[=](){
// repaint();
update(); //手动调用绘图事件
});
ti->start(1000);
void MainWindow::paintEvent(QPaintEvent *ev){
QPainter painter(this);
Qx += 40;
if(Qx >= this->width()){
Qx = 0;
}
painter.drawPixmap(Qx,20,200,200,QPixmap(":/liu.jpg"));
}
以前使用repaint()来调用绘图事件,现在推荐使用update函数。
绘图设备
绘图设备是指继承QPainterDevice的子类。Qt一共提供了四个这样的类,分别是QPixmap、QBitmap、QImage和 QPicture。
- QPixmap专门为图像在屏幕上的显示做了优化
- QBitmap是QPixmap的一个子类,它的色深限定为1,可以使用 QPixmap的isQBitmap()函数来确定这个QPixmap是不是一个QBitmap。
- QImage专门为图像的像素级访问做了优化。
- QPicture则可以记录和重现QPainter的各条命令。
前面几个例子中,QPainter painter(this)之所以可以这么写,是因为QWidget也是一个绘图设备,因为他继承了QPainterDevice。
//Pixmap绘图设备
QPixmap pix(300,300);
// 填充颜色
pix.fill(Qt::white);
//声明画家
QPainter painter(&pix);
painter.drawEllipse(QPoint(20,20),50,50);
//保存
pix.save("E:\pix.png");
最后
以上就是聪明摩托为你收集整理的QT——绘图事件的全部内容,希望文章能够帮你解决QT——绘图事件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复