QGraphicsPixmapItem не может быть выбран

Я хочу, чтобы мой QGraphicsPixmapItem стал доступным для выбора (т.е. кликабельным в более общем смысле) на QGraphicScene, но это не так. На самом деле я изменяю образец сцены диаграммы Qt, где подкласс QGraphicsItem используется и выбирается. Я ценю вашу помощь.

код cpp (частичный):

#include <iostream>
#include <QtGui>    
#include "overlayPixmapItem.h"

OverlayPixmapItem::OverlayPixmapItem(DiagramType diagramType, QMenu *contextMenu,
                                                   QPixmap img, QGraphicsItem *parent,
                                                   QGraphicsScene *scene)
    : QGraphicsPixmapItem(img, parent), QObject()
{
    myDiagramType = diagramType;
    myContextMenu = contextMenu;

    this->setAcceptsHoverEvents(true);
    this->setAcceptHoverEvents(true); //
    this->setAcceptedMouseButtons(Qt::LeftButton);
    this->setAcceptedMouseButtons(Qt::RightButton);
    this->acceptDrops();

    setFlag(QGraphicsItem::ItemIsMovable, true);
    setFlag(QGraphicsItem::ItemIsSelectable, true);
    this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
}
:

заголовок (частичный):

#ifndef OVERLAYPIXMAPITEM_H
#define OVERLAYPIXMAPITEM_H

#include <QGraphicsPixmapItem>
#include <QList>
#include <QObject>

class QPixmap;
class QGraphicsItem;
class QGraphicsScene;
class QTextEdit;
class QGraphicsSceneMouseEvent;
class QMenu;
class QGraphicsSceneContextMenuEvent;
class QPainter;
class QStyleOptionGraphicsItem;
class QWidget;
class QPolygonF;

class OverlayPixmapItem : public QObject, public QGraphicsPixmapItem
{
        Q_OBJECT

    public:
        enum { Type = UserType + 15 };
        enum DiagramType { Crosshair };

        OverlayPixmapItem(DiagramType diagramType, QMenu *contextMenu,
                                 QPixmap img, QGraphicsItem *parent = 0, QGraphicsScene *scene = 0);

        DiagramType diagramType() const { return myDiagramType; }
        QPolygonF polygon() const { return myPolygon; }
        int type() const { return Type;}

    protected:
        void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
        QVariant itemChange(GraphicsItemChange change, const QVariant &value);
        void hoverEnterEvent ( QGraphicsSceneHoverEvent * event );
        void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event );

    public: signals:
        void mouseHoveredOnElem(OverlayPixmapItem *i);
        void mouseHoveredOutOfElem(OverlayPixmapItem *i);

    private:
        DiagramType myDiagramType;
        QPolygonF myPolygon;
        QMenu *myContextMenu;
};
#endif // OVERLAYPIXMAPITEM_H

person IsaacS    schedule 19.07.2012    source источник
comment
На первый взгляд я бы сказал, что вы неправильно настроили принятую кнопку мыши. попробуйте setAcceptedMouseButtons(Qt::LeftButton|Qt::RightButton);, иначе ваш элемент не будет принимать левую кнопку мыши из-за второго вызова   -  person azf    schedule 20.07.2012
comment
@totem Почему ты написал это как комментарий? Думаю, это правильный ответ на вопрос...   -  person leemes    schedule 20.07.2012
comment
@totem Как заметил Лимес, ваш комментарий был ответом на мою проблему. Если вы перепишете его в разделе ответов, я выберу его. Спасибо!   -  person IsaacS    schedule 20.07.2012


Ответы (1)


Как указано в моем первом комментарии, вы дважды вызываете метод setAcceptedMouseButtons(). В то время как первый вызов фактически устанавливает правильную кнопку для принятия, второй вызов делает эту настройку потерянной.

Чтобы принять обе кнопки на этом элементе, вы должны объединить флаги Qt MouseButtons следующим образом:

item->setAcceptedMouseButtons(Qt::LeftButton|Qt::RightButton) ;
person azf    schedule 21.07.2012