Qt中在label上载入图片后在上面画矩形框的方法

        通常我们会在QLabel上显示图片(本文假设你已经会了,不会的话搜一下也很简单),但是有时候我们会需要在演示时在图片上画些东西。比如,我想显示我在图片上用鼠标选取的矩形框,即画一个红矩形框。这个问题说简单也简单,但是千万别小看它,我就曾被这个小问题折磨了一个周末,最后终于搞定,记录下分享给日后需要的朋友吧。先来张图展示下我们想达到的效果:

Qt中在label上载入图片后在上面画矩形框的方法

        首先,需要子类化控件QLabel成你自己的类如myLabel, 然后重写myLabel的paintEvent方法。这个方法的目的是保证你能在这个myLabel类生成的对象中画图并显示。如果你只在上面这个QDialog对话框中重写paintEvent方法的话,那么在画框的时候图片上的红线是无法显示出来的(感觉上就是图片遮挡了画的框)。

        此外,重写子类的paintEvent方法时还有一个非常重要的地方,网上好多方法都忽略了没提这个地方,那就是在重写的paintEvent方法中首先要显式的调用父类的paintEvent方法!!! 忽略的结果就是重写了子类的paintEvent方法后运行时你却看不到这个myLabel控件了。。下面是重写QLabel的子类myLabel的paintEvent方法的代码示例:

void myLabel::paintEvent(QPaintEvent *event)
{
    QLabel::paintEvent(event);//先调用父类的paintEvent为了显示‘背景‘!!!
    QPainter painter(this);
    painter.setPen(QPen(Qt::red,2));
    painter.drawRect(QRect(x,y,w,h));
}



Qt中在label上载入图片后在上面画矩形框的方法

上一篇:12306为什么这么慢?


下一篇:iframe get请求传递中午参数 乱码 解决方案