0
マウスクリック機能を含むようにサブクラス化しました。ここで、長方形は、mousePressEvent
,mouseMoveEvent
およびmouseReleaseEvent
によって選択することができる。別の矩形を選択しようとしているとき、私の前の矩形は削除されていません。それは私が表示したくない私の以前の描かれた矩形でまだ表示されています。私は1つの長方形だけを選択して表示したい。私は別の矩形を選択するためにもう一度押すと、以前のものを削除する必要がありました。QImage/QLabelから切り取った矩形を削除するには?
私はここに含まれ、私のサブクラスは、いずれかがどのようにこの問題を解決する方法を教えてもらえます
#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);
}
}
次のように
#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
は次のように
mouse_crop
の.hがあるmouse_crop
の名前?前もって感謝します。
ありがとうございました。しかし、それは私が再び作物を作ろうとするときにのみ取り除かれます。しかし、この 'QLabel'をもう一度押すだけで、前の1つの長方形がクリアされるようにする方法。 – Sanakum
@サナクムあなたの質問で理解したことから、別の矩形を作成するときに前の矩形を表示しないようにしたかったのです。私は正しいですよ? – eyllanesc
はい、あなたは絶対に正しいです、あなたのソリューションは私の問題を解決します。そして、あなたに助けてくれてありがとう。しかし、まだ私がコメントに書いた問題がいくつかあります。もう1つは、もう一度押すと、私が既に得た長方形のコーナーポイントが変更されています。そして新しいポイント座標を示しています。 – Sanakum