Ich habe eine Szene in meinem Programm mithilfe von QGraphicsFramework implementiert. Also habe ich eine Form (Eltern) und seinen Ankerpunkt (Kind) beide QGraphicsItem
.Wählen Sie in QGraphicsFramework sowohl das untergeordnete Element als auch das übergeordnete Element aus
Shape::Shape(QGraphicsItem *parent) :
QGraphicsItem(parent)
{
setFlags(ItemIsSelectable | ItemIsMovable | ItemSendsGeometryChanges);
anchorPoint = new AnchorPoint(this);
anchorPoint->setParentItem(this);
anchorPoint->setVisible(false);
}
Der Ankerpunkt normalerweise unsichtbar. Aber wenn ich meine Form auswähle, muss ich ihren Ankerpunkt zeigen und ihn dementsprechend ausblenden, wenn die Form die Auswahl verliert. Also habe ich diese Aktion zu itemChange gebunden:
QVariant Shape::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
{
switch(change)
{
case QGraphicsItem::ItemSelectedChange:
anchorPoint->setVisible(value.toBool());
break;
}
return QGraphicsItem::itemChange(change, value);
}
Aber das Problem erscheint, wenn ich den Ankerpunkt verschieben möchten. Wenn ich darauf klicke, verliert die Form den Fokus und versteckt ihren Ankerpunkt, so dass ich ihn nicht bewegen kann. Gibt es eine Möglichkeit, ein untergeordnetes Element auszuwählen, wenn das übergeordnete Element ausgewählt bleibt?
Danke, @ddriver. Ich habe über diesen Weg nachgedacht. Aber ich ärgere mich darüber, dass ich einige bereits implementierte Funktionen implementieren werde. Ich spreche über die Auswahl usw. Eine andere Sache, die mich nervt ist, dass die Mehrfachauswahl in der Tat aktiviert ist. Ich kann einige Elemente in einer Szene ohne Problem auswählen. Aber ich denke immer noch, dass Ihr Vorschlag der beste Weg ist. – folibis
@folibis - Qt ist riesig, aber es ist mehr auf dem "aufgeblähten" als dem "voll-proof" Ende des Spektrums. Oft funktioniert die gebotene Funktionalität nicht so, wie Sie es brauchen, manchmal kann es sogar in die Quere kommen. Oft ist der einzige Weg, es auf Ihre Art zu schaffen, es selbst zu tun. Aus diesem Grund habe ich mich trotz der schlechten Speichereffizienz für QML entschieden, da es wesentlich schneller ist als der C++ - Grafikstapel. – dtech