利用QLabel显示图片,在里面进行矩形框的显示。下面就是一个简单的事例。
首先重新定义一个自己的类,用来重新定义函数paintEvent ( QPaintEvent * )
class QtLabel :public QLabel
{
public:
QtLabel();
~QtLabel();
int x,y,w,h;
void paintEvent(QPaintEvent *event);
void DrawRangle(int x ,int y ,int h,int w);
};
paintEvent ( QPaintEvent * ) 是一个虚保护函数,只要窗口部件需要被重绘就被调用。每个要显示输出的窗口部件必须实现它。下面就是看看如何定义的
void QtLabel::paintEvent(QPaintEvent *event)
{
QLabel::paintEvent(event);
QPainter painter(this);
painter.setPen(QPen(Qt::red,10));
painter.drawRect(QRect(x,y,w,h));
}
这里就是重新定义虚函数paintEvent,第一句话就是先调用父辈的event,就可以显示出背景图片。不然就只有一个矩形框。本来应该是下面的样子
没有背景图片。
那么如何使用这个函数呢?repaint()或update()时调用。
void QtLabel::DrawRangle(int xx, int yy, int hh, int ww)
{
x = xx ;
y = yy ;
w = ww ;
h = hh ;
update();
}
这里调用update().
下面就是看看如何显示并绘制矩形框
QImage* img=new QImage;
img->load("/home/yu/Desktop/Person/person/person/image/1.jpg");
lab.setPixmap(QPixmap::fromImage(*img));
lab.DrawRangle(x,y,h,w);
delete img;
lab.show();
这里就没有什么多说的。
小结:
这里只是一个简单的事例,具体原理与架构还是很值得深究的。