求问大神:Qt用label显示图片,如何实现第一次点击后显示矩形,第二次点击后再显示一个矩形,之前的不消失

羽觞_醉月 2017-06-08 11:08:05
求问大家,我用label显示图片,重写paintEvent来显示鼠标点击位置的一个矩形,在
mousePressEvent里用update()来实现随鼠标位置更新矩形,但是这样就会使之前的
矩形消失。
怎么样才能实现鼠标每点击一次,在鼠标位置显示一个矩形,且之前的不会消失。
代码如下:
QImageLabel.h

class QImageLabel : public QLabel
{
Q_OBJECT
public:
QImageLabel(QWidget *parent = 0);
virtual ~QImageLabel();


protected:
void paintEvent(QPaintEvent *event);
void mousePressEvent(QMouseEvent *event);
private:
QPoint currentpos;

};



QImageLabel.cpp

#include "QImageLabel.h"
#include <QtWidgets>

QImageLabel::QImageLabel(QWidget *parent):
QLabel(parent)
{

currentpos.setX(0);
currentpos.setY(0);

}
QImageLabel::~QImageLabel()
{

}


void QImageLabel::paintEvent(QPaintEvent *event)
{
QLabel::paintEvent(event); //需要调用父类的paintEvent事件,否则Label都无法绘制
QPainter painter(this);
painter.setPen(Qt::red);

painter.drawRect(currentpos.x() - 30, currentpos.y() - 30, 60, 60);

}

void QImageLabel::mousePressEvent(QMouseEvent *event)
{
currentpos = event->pos();
update();
}

...全文
258 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
羽觞_醉月 2017-07-04
  • 打赏
  • 举报
回复
嗯,你的方法挺好。
  • 打赏
  • 举报
回复
在mousePressEvent中将鼠标的每个点保存在一个vector里面,在paintEvent里重画所有的已经画过的矩形,这样就不会update时之前的会消失。

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧