gpt4 book ai didi

c++ - QGraphicsPixmapItem 不可选

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:46 25 4
gpt4 key购买 nike

我希望我的 QGraphicsPixmapItemQGraphicScene 上变得可选(即可以更一般的方式点击),但它不是。我实际上是在修改 QtDiagram Scene sample ,其中 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

最佳答案

正如我在第一条评论中所指出的,您调用了两次 setAcceptedMouseButtons() 方法。虽然第一次调用实际上设置了接受的正确按钮,但第二次调用使此设置丢失。

要接受此项目上的两个按钮,您必须以这种方式组合 Qt MouseButtons 标志:

item->setAcceptedMouseButtons(Qt::LeftButton|Qt::RightButton) ;

关于c++ - QGraphicsPixmapItem 不可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11566808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com