LINUX.ORG.RU

Помогите понять что я хочу

 , ,


0

1

Пытаюсь освоить графику в Qt.
Хочу написать программу, которая визуализирует бинарное дерево и позволяет делать с деревьями такие операции, как разделить дерево на 2 дерева, добавить/удалить элемент, слить 2 дерева в одно, ...

Собираюсь использовать QGraphics.

Не могу понять как должна выглядеть структура программы.

Класс Tree должен быть унаследован от QGraphicsItem
Каждый узел дерева (класс TreeNode) должен быть тоже унаследован от QGraphicsItem

Если делать так, то TreeNode должны создаваться через Tree. И их позиция должна быть зависима от позиции Tree.

Я попробовал сделать класс Tree и создал из него 2 QGraphicsEllipseItem:

Tree::Tree(QObject *parent) {
    ellipse1 = new QGraphicsEllipseItem(0,0,10,10);
    ellipse2 = new QGraphicsEllipseItem(10,10,20,20);
}

void Tree::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
           QWidget *widget) {
    ellipse1->paint(painter, option, widget);
    ellipse2->paint(painter, option, widget);
}

Но эти эллипсы не перемещаются, когда я делаю tree.setPos(x, y);

И вообще есть ощущение что это всё надо делать совсем не так, но я не могу понять как.

Как лучше реализовать визуализацию дерева?

★★★★★

модель/представление, не?

erfea ★★★★★
()

ellipse1->paint(painter, option, widget);

Этого делать не надо. Добавить при создании свои ноды в сцену можно, она сама подхватит все события. А ещё правильнее для этих целей будет родителем (parent) в конструкторе для этих нод указать Дерево. Ну, и для вложенных нод - ноду-родителя. В общем, штудируй документацию по классами и примеры.

schizoid ★★★
()
Ответ на: комментарий от schizoid

А ещё правильнее для этих целей будет родителем (parent) в конструкторе для этих нод указать Дерево.

Да, так работает.

В общем, штудируй документацию по классами и примеры.

Линк на годные примеры есть? Или какая нибудь простая прога, которую можно покурочить и что-то понять?

Tanger ★★★★★
() автор топика
Ответ на: комментарий от unC0Rr

Ну дык одного на все деревья хватит.

Tanger ★★★★★
() автор топика
Ответ на: комментарий от Tanger

годные примеры

Из стандартной поставки: Colliding Mice и Elastic Nodes, например. С подробными пояснениями. Ищи во встроенной справке.

schizoid ★★★
()
Ответ на: комментарий от Tanger

Ну и вообще, не торопись сразу лепить программу целиком. Попробуй каждую фичу в отдельности.

schizoid ★★★
()

Как раз для универа писал лабу на Qt с визуализацией бинарных деревьев. Взял Elastic Nodes за основу.

Скачать бесплатно без регистрации. Скорее всего быдлокод, ибо я плохо умею в плюсы, а Qt вообще тогда впервые использовал.

pevzi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.