簡體   English   中英

如何從QImage / QLabel中刪除裁剪的矩形?

[英]How to remove cropped rect from QImage/QLabel?

我做了子分類以包括鼠標單擊功能。 在這里,可以通過mousePressEventmouseMoveEventmouseReleaseEvent選擇一個矩形。 當我嘗試選擇另一個矩形時,不會刪除我之前的矩形。 它仍與我先前不想顯示的繪制矩形一起顯示。 我想選擇並僅顯示一個矩形。 我的意思是當我再按一次以選擇另一個矩形時,應該刪除上一個矩形。

我在這里包含了名為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);
    }
}

誰能告訴我如何解決這個問題? 提前致謝。

造成該問題的原因是,每當您按下鼠標時,您都在創建一個新的QRubberBand,而您要做的就是僅創建一個QRubberBand,將其隱藏並在必要時顯示它。

mouse_crop::mouse_crop(QWidget *parent)
    : QLabel(parent)
{
    rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
    rubberBand->hide();
}

void mouse_crop::mousePressEvent(QMouseEvent *ev)
{
    origin = ev->pos();
    rubberBand->setGeometry(QRect(origin, origin));

    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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM