Qt实现在QLabel上绘制2D图形

来源:互联网 发布:淘宝详情页图片的宽度 编辑:程序博客网 时间:2024/05/04 11:01

根据以往的经验,我们绘制图形的时候都是在paintevent()函数中实现的,每次移动或改变窗口都会调用该函数来实现绘制。
在paintevent函数中,通常需要设置QPainter对象,创建QPainter对象的同时需要指定绘图设备,即继承自QPainterDevice的子类作为绘图设备,绘制出来的图形将在这个设备上进行显示,Qt一共提供了4个这样的类,分别是QPixmap,QBitmap,QImage,和QPicture。这4个子类都可作为绘图设备来进行绘制和显示图形并有着各自的特点,但是本篇重点不在这4个类。
现在我们想在QLabel上进行绘制,应该有什么方法呢?网上对于实现这个的方法有多种,但是本篇只介绍一种,使用事件过滤器来使QLabel对象捕获QEvent::Paint事件。即,绘图函数不需要放在paintevent()函数中也可以实现绘图。
那么,实现这个功能的主要函数就还是事件过滤器的两个重要函数,即installEventFilter()和eventFileter()函数,附上源程序供大家参考

imglabel=new QLabel(widget);
imglabel->setGeometry(10,10,670,580);
imglabel->installEventFilter(this);

bool INVO::eventFilter(QObject *watched, QEvent *event)
{
if(watched ==imglabel && event->type() == QEvent::Paint)
{
paint_gear();
}
return QWidget::eventFilter(watched,event);
}

void INVO::paint_gear()
{
QPainter painter(imglabel);
painter.setPen(Qt::blue);
painter.drawLine(100,100,200,200);
}

上述函数已经经过验证,是可行的,还有其他方法实现这一功能,可自行查阅其他资料

0 0
原创粉丝点击