В моем приложении у меня есть два типа объекта. Один из них - элемент поля, другой - составной элемент.
Составные элементы могут содержать два или более полевых элемента.
Вот моя реализация составного элемента.
#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";
}
Мой первый вопрос - как передать событие контекстного меню конкретному дочернему элементу.
композитный * http://img169.imageshack.us/img169/9079/composite1.jpg
На рисунке выше показан один из моих возможных составных элементов.
Если вы посмотрите на код выше, вы увидите, что я печатаю «Тест», когда происходит событие контекстного меню.
Когда я щелкаю правой кнопкой мыши по символу линии, я вижу, что напечатано сообщение «Тест».
Но когда я щелкаю правой кнопкой мыши по сигналу, символ «Тест» не печатается и я хочу, чтобы он был напечатан.
Мой второй вопрос, что является причиной такого поведения.
Как мне это преодолеть.