Я реализовал сцену в своей программе с помощью 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