QGraphicsFrameworkを使用してプログラムでシーンを実装しました。 私は形(親)とそのアンカーポイント(子)を両方ともQGraphicsItem
としています。QGraphicsFrameworkで子アイテムとその親の両方を選択します。
Shape::Shape(QGraphicsItem *parent) :
QGraphicsItem(parent)
{
setFlags(ItemIsSelectable | ItemIsMovable | ItemSendsGeometryChanges);
anchorPoint = new AnchorPoint(this);
anchorPoint->setParentItem(this);
anchorPoint->setVisible(false);
}
通常、アンカーポイント項目は表示されません。しかし、私が私の形状を選択するときに、そのアンカーポイントを表示し、形状が選択を失ったときにそれを隠す必要があります。 は、だから私はitemChangeにこのアクションをバインドしました:
QVariant Shape::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
{
switch(change)
{
case QGraphicsItem::ItemSelectedChange:
anchorPoint->setVisible(value.toBool());
break;
}
return QGraphicsItem::itemChange(change, value);
}
しかし、私はアンカーポイントを移動したいときに問題が表示されます。私がクリックすると、形がフォーカスを失い、アンカーポイントが隠れて移動できなくなります。親アイテムが選択されているときに子アイテムを選択する方法はありますか?
ありがとう、@ddriver。私はこの方法について考えてきました。しかし、私はすでに実装されているいくつかの機能を実装しようとしているのはちょっと面倒です。私は選択などについて話しています。私を悩ます別のことは、複数の選択が実際に有効になっていることです。私は問題のないシーンでいくつかのアイテムを選択できます。しかし、私はまだあなたの提案が最良の方法だと思っています。 – folibis
@folibis - Qtは巨大ですが、スペクトルの「完全保証型」端よりも「肥大化」しています。提供された機能は、必要なときには機能しませんが、他の方法でも機能します。それをあなたの方法で得るための唯一の方法は、自分で行うことです。だから私はQMLのために貧しいメモリ効率にもかかわらず、それははるかに高速ですC + +のグラフィックスのスタックよりもそうです。 – dtech