gpt4 book ai didi

c++ - Qt 子类图形场景不允许我选择/聚焦到它上面的图形项目

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

我已经将我自己的 qgraphicsview 子类化,因为我想在单击时从带有位置的场景发送信号,在这个场景中也是我的子类化图形 itms,它们是可选择和可聚焦的。问题是,当我在场景中实现自己的 mousepressed/mousemoved/mousereleased 事件处理程序时,我突然无法在场景中选择任何内容。

这是我对图形场景的实现:

/////////////////////HEADER//////////////
#include <QGraphicsScene>

class myGraphicsScene : public QGraphicsScene
{
Q_OBJECT
public:
explicit myGraphicsScene(QObject * parent = 0);
explicit myGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject * parent = 0);

signals:
void mouseReleased(QPointF pos);
void mousePressed(QPointF pos);
void mouseMoved(QPointF pos);
void mouseDoubleClicked(QPointF pos);

protected:
void mouseDoubleClickEvent (QGraphicsSceneMouseEvent * event);
void mousePressEvent(QGraphicsSceneMouseEvent * event);
void mouseMoveEvent(QGraphicsSceneMouseEvent * event);
void mouseReleaseEvent(QGraphicsSceneMouseEvent * event);


////////////////////CPP//////////////////////
#include <QGraphicsSceneMouseEvent>


myGraphicsScene::myGraphicsScene(QObject *parent) : QGraphicsScene(parent)
{
}

myGraphicsScene::myGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject *parent)
: QGraphicsScene( x, y, width, height, parent )
{
}

void myGraphicsScene::mouseDoubleClickEvent ( QGraphicsSceneMouseEvent *event )
{
QGraphicsScene::mouseDoubleClickEvent ( event );
emit mouseDoubleClicked ( event->scenePos () );
}

void myGraphicsScene::mousePressEvent (QGraphicsSceneMouseEvent *event)
{
QGraphicsScene::mousePressEvent ( event );
emit mousePressed ( event->scenePos () );
}

void myGraphicsScene::mouseMoveEvent (QGraphicsSceneMouseEvent *event)
{
QGraphicsScene::mouseMoveEvent ( event );
emit mouseMoved ( event->scenePos () );
}

void myGraphicsScene::mouseReleaseEvent (QGraphicsSceneMouseEvent *event)
{
QGraphicsScene::mousePressEvent ( event );
emit mouseReleased ( event->scenePos () );
}

哪个事件实现有误?

P.S.:当我注释掉 mousePressed/moved/released 实现时,它就像魅力一样。

最佳答案

我怀疑问题在于调用 QGraphicsScene::mouseMoveEvent 等事件,当像这样调用时,可能会将事件设置为正在处理。正如 QGraphicsSceneMouseEvent 声明的 accepted标志:-

Setting the accept parameter indicates that the event receiver wants the event. Unwanted events might be propagated to the parent widget. By default, isAccepted() is set to true, but don't rely on this as subclasses may choose to clear it in their constructor.

您可以尝试在每个重载事件中调用 event->setAccepted(false) 以指示要传播的事件。

关于c++ - Qt 子类图形场景不允许我选择/聚焦到它上面的图形项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26797806/

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