Я сделал подкласс, чтобы включить функцию щелчка мыши. Здесь прямоугольник можно выбрать с помощью mousePressEvent
, mouseMoveEvent
и mouseReleaseEvent
. Когда я пытаюсь выбрать другой прямоугольник, мой предыдущий прямоугольник не удаляется. Он все еще отображается с моим предыдущим нарисованным прямоугольником, который я не хочу отображать. Я хочу выбрать и отобразить только один прямоугольник. Я имел в виду, что когда я снова нажимаю, чтобы выбрать другой прямоугольник, предыдущий должен быть удален.
Я включил сюда свой подкласс с именем mouse_crop
mouse_crop
.h выглядит следующим образом
#ifndef MOUSE_CROP_H
#define MOUSE_CROP_H
#include <QMainWindow>
#include <QObject>
#include <QWidget>
#include <QMouseEvent>
#include <QLabel>
#include <QRubberBand>
class mouse_crop : public QLabel
{
Q_OBJECT
public:
mouse_crop(QWidget *parent=0);
QRubberBand *rubberBand;
QPoint origin, ending;
protected:
void mousePressEvent(QMouseEvent *ev);
void mouseMoveEvent(QMouseEvent *ev);
void mouseReleaseEvent(QMouseEvent *ev);
signals:
void sendMousePosition(QPoint&);
void sendMouseEnding(QPoint&);
};
#endif // MOUSE_CROP_H`
И mouse_crop.cpp
выглядит следующим образом
#include "mouse_crop.h"
mouse_crop::mouse_crop(QWidget *parent):QLabel (parent)
{
}
void mouse_crop::mousePressEvent(QMouseEvent *ev)
{
origin = ev->pos();
rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
if(ev->button()== Qt::LeftButton || ev->button()== Qt::RightButton)
{
rubberBand->show();
emit sendMousePosition(origin);
}
}
void mouse_crop::mouseMoveEvent(QMouseEvent *ev)
{
rubberBand->setGeometry(QRect(origin, ev->pos()).normalized());
}
void mouse_crop::mouseReleaseEvent(QMouseEvent *ev)
{
ending = ev->globalPos();
if(ev->button()== Qt::LeftButton || ev->button()== Qt::RightButton)
{
emit sendMouseEnding(ending);
}
}
Может ли кто-нибудь сказать мне, как это решить? Заранее спасибо.