используя QRubberBand поверх QGraphicsItem - PullRequest
1 голос
/ 21 апреля 2011

Я пытаюсь сделать так, чтобы, если пользователь нажимает на QGraphicsItem, он создал QRubberBand только для этого элемента.

У меня в классе было следующее:

void ImagePixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *event){
    if(currentKey == Qt::Key_Control){
        qDebug("This is a control click");

        origin = event->screenPos();
        if (!selected.isNull())
            selected = new QRubberBand(QRubberBand::Rectangle, event->widget());
        selected->setGeometry(QRect(origin, QSize()));
        selected->show();

    }
}

Это дает мне ошибку при вызове setGeometry, но никакой дополнительной информации.По сути, это был код, полученный от QRubberBand, за исключением того, что мне пришлось использовать event.screePos () и мне пришлось установить конструктор QRubberBand на event.widget () вместо «this», потому что, я думаю, QGraphicsItem не наследовалQWidget?

Есть ли лучший способ сделать это?

Спасибо

1 Ответ

1 голос
/ 06 ноября 2011

Я сделал этот пример, надеюсь помочь

Мой заказной товар.

#ifndef ITEM_H
#define ITEM_H
#include <QtCore>
#include <QtGui>
class Item : public QGraphicsRectItem
{
public:
    Item()
    {
        setRect(0,0,100,100);
    }

    void mousePressEvent(QGraphicsSceneMouseEvent * event)
    {
        origin = event->screenPos();
        if (!rubberBand)
            rubberBand = new QRubberBand(QRubberBand::Rectangle,0);
        rubberBand->setGeometry(QRect(origin, QSize()));
        rubberBand->show();
    }

    void mouseMoveEvent(QGraphicsSceneMouseEvent * event )
    {
        QRectF inside = QGraphicsRectItem::boundingRect();
        QPointF mapPoint = mapFromScene(event->pos());
        if(inside.contains(mapPoint))
            rubberBand->setGeometry(QRect(origin, event->screenPos()).normalized());
    }

    void mouseReleaseEvent(QGraphicsSceneMouseEvent * event )
    {
        rubberBand->hide();

    }
private:
    QRubberBand * rubberBand;
    QPoint origin;

};

#endif // ITEM_H

и показать вид

#include <QtGui>
#include "item.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QGraphicsView w;
    QGraphicsScene s;
    Item * item = new Item();
    w.setScene(&s);
    s.addItem(item);

    w.show();
    return a.exec();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...