내 응용 프로그램에는 두 가지 객체 유형이 있습니다. 하나는 필드 항목이고 다른 하나는 복합 항목입니다. 복합 항목에는 둘 이상의 필드 항목이 포함될 수 있습니다. 내 복합 상품 구현은 다음과 같습니다.QGraphicsWidget의 상황에 맞는 메뉴
#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";
}
첫 번째 질문은 특정 아이에게 컨텍스트 메뉴 이벤트를 전파 할 수있는 방법입니다. 위의
composite1 http://img169.imageshack.us/img169/9079/composite1.jpg
그림에 내 가능한 복합 항목 중 하나를 보여줍니다.
위의 코드를 보면 컨텍스트 메뉴 이벤트가 발생할 때 "테스트"가 인쇄됩니다.
선 기호를 마우스 오른쪽 버튼으로 클릭하면 "테스트"메시지가 인쇄됩니다. 하지만 신호 기호 "Test"를 마우스 오른쪽 버튼으로 클릭하면 인쇄되지 않고 인쇄됩니다.
두 번째 질문은 무엇입니까? 어떻게 이것을 극복합니까?
첫 번째 질문을 찾을 수 없습니다. – mosg
@mosg 죄송합니다. 첫 번째 질문을 쓰는 것을 잊어 버렸습니다. 나는 그 질문을 편집했다. – onurozcelik