私のアプリケーションには、2 つのオブジェクト タイプがあります。1 つはフィールド アイテム、もう 1 つは複合アイテムです。複合アイテムには、2 つ以上のフィールド アイテムが含まれる場合があります。これが私の複合アイテムの実装です。
#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";
}
私の最初の質問は、コンテキスト メニュー イベントを特定の子に伝達する方法です。
上の写真は、可能な複合アイテムの 1 つを示しています。
上記のコードを見ると、コンテキスト メニュー イベントが発生したときに "Test" と表示されることがわかります。
ライン シンボルを右クリックすると、「テスト」メッセージが表示されます。しかし、信号記号「テスト」を右クリックしても印刷されず、印刷したいです。
私の2番目の質問は、この動作の原因です。どうすればこれを克服できますか。