gpt4 book ai didi

c++ - QGraphicsWidget 上的上下文菜单

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

在我的应用程序中,我有两种对象类型。一个是字段项,另一个是复合项。复合项可能包含两个或更多字段项。这是我的复合项目实现。

#include "compositeitem.h"

CompositeItem::CompositeItem(QString id,QList<FieldItem *> _children)
{
children = _children;
}

CompositeItem::~CompositeItem()
{
}

QRectF CompositeItem::boundingRect() const
{
FieldItem *child;
QRectF rect(0,0,0,0);
foreach(child,children)
{
rect = rect.united(child->boundingRect());
}
return rect;
}

void CompositeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget )
{
FieldItem *child;
foreach(child,children)
{
child->paint(painter,option,widget);
}
}

QSizeF CompositeItem::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
{
QSizeF itsSize(0,0);
FieldItem *child;
foreach(child,children)
{
// if its size empty set first child size to itsSize
if(itsSize.isEmpty())
itsSize = child->sizeHint(Qt::PreferredSize);
else
{
QSizeF childSize = child->sizeHint(Qt::PreferredSize);
if(itsSize.width() < childSize.width())
itsSize.setWidth(childSize.width());
itsSize.setHeight(itsSize.height() + childSize.height());
}
}
return itsSize;
}

void CompositeItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
{
qDebug()<<"Test";
}

我的第一个问题是如何将上下文菜单事件传播给特定的 child 。

composite1

上面的图片展示了我可能的组合项目之一。

如果您查看上面的代码,您会看到我在上下文菜单事件发生时打印了“Test”。

当我右键单击线条符号时,我看到打印了“测试”消息。但是,当我右键单击信号符号时,“测试”未打印出来,我希望打印出来。

我的第二个问题是什么导致了这种行为。我该如何克服这个问题。

最佳答案

您可以尝试使用 mouseRelease 事件重新实现您的 contextMenu 吗?

void CompositeItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
if(event->button() == Qt::RightButton)
{
contextMenu->popup(QCursor::pos());
}
}

关于c++ - QGraphicsWidget 上的上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2808964/

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