LINUX.ORG.RU

Помогите с деревом в Qt4!


0

0

Привет трудящимся!

Учусь на программера, юзаю Linux, в университете он конечно не установлен и все "поделки" делаюся на Delphi/Borland_C++_Builder/M$VS.

Я конечно уже определился и ориентирован на глубокое изучение и работу под Linux, посему учить и уюать форточные среды не собираюсь!

Раньше выходил из положения создавая под своим домашним Дебьяном консольные лабы, которые без особых проблемм, без лишних телодвижений, компилировал под Окнами с помощью MinGW. Но один препод даже видеть консоль не хочет (! я там дерево сделал :), столько времени убил!). NCurses, я думаю ему тоже не понравятся, да они по-моему и не поддерживаются окнами и MinGW. Нашел выход - QT! Уже затестил, смог скомпилить hello world на обоих платформах :). Сейчас активно в нем разбираюсь. Но у меня мало времени! Во вторник нужно лабы сдать!

Значит алгаритм такой:

есть N елементов каждому соответствует двоичное число (пока пустое), они делятся на две группы, ко всем эл-там 1й группы дописывается 0 (бит), соответственно к эл-там второй - 1, потом каждая новая группа снова делится на две группы и снова дописываются биты, так пока не будет N групп по 1 элементу. Мне нужно отразить динамику изменения каждого элемента в виде дерева.

Наверное кто-то уже узнал в этом алгаритме кодирование методом Шэнона-Фано.


Должно выглядеть примерно так:

0
  00
    000
    001
  01
    010
    011
1
  10
    100
    101
  11
    110
    111

Это все завязано на вероятностях. У каждого элемента есть своя
вероятность, сумма вероятностей всех элементов = 1.0. Каждая группа
делится на две новых с максимально одинакоыми вероятностямы, поэтому
вышеуказанные цепочки будут разной длинны.

Хотя для моего вопроса это все не так уж важно!
Подскажите какие-небудь примеры с деревьями подходящего мне типа в Qt.

Спасибо!

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

Рабочий код алгоритма я уже написал, теперь его нужно прикрутить к qt4.

fifajan
() автор топика

Может нарисовать на QCanvas'e ? Наследуешь от QCanvasItem'a, добавляешь реализацию функции draw ну и вперёд потом только линиями соединить.

Boost
()
Ответ на: комментарий от fifajan

Можно сохранить дерево в текстовый файл, примерно так:

digraph tree {
size="5,5";
node [shape=record,style=filled];
"root"->"0";
"root"->"1";
"0"->"00";
"0"->"01";
"00"->"000";
"00"->"001";
"01"->"010";
"01"->"011";
"1"->"10";
"1"->"11";
"10"->"100";
"10"->"101";
"11"->"110";
"11"->"111";
}

потом из Qt программы выполнить программу dot (см. QProcess):

dot -Tpng graph.txt -o graph.png

и отобразить graph.png.

dot находится здесь: http://www.graphviz.org

Но это так, просто идея ;-) 

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

Да там есть классы QTreeView, QTreeWidget.

Я их хочу использовать, но пока очень неуверенно чувствую себя в Qt :).

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

> потом из Qt программы выполнить программу dot (см. QProcess).

Слишком уж извращенный unix-way, не пакатит вапче! Я ж говорю надо сдавать под форточками, а собирать под винду этот dot (не факт что возможно) нет ни времени ни желания.

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

> собирать под винду этот dot (не факт что возможно) нет ни времени ни желания.

http://www.graphviz.org/Download_windows.php

Еще в KDevelop есть плагин Classview, он как раз использует dot, посмотри, как он это делает (kdevelop/parts/classview/digraphview.cpp).

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

Не, это по-моему неоправданно заморочено получается. Охота все-же сделать с вышеупомянутыми классами, а то дерео надо будет открывать/закрывать и т. д.

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

Что-то я не совсем понимаю, что надо сделать. Если надо красиво нарисовать дерево, так чтобы оно было похоже на дерево, тогда только dot. Если надо это дерево открывать-закрывать, типа как дерево каталогов, тогда QTreeView. Если ни то ни другое не годится, тогда QGraphicsView, свинцовые штаны и мешок терпения. :)

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

Так, я сейчас успешно (пока :) ) эксперементирую с QTreeWidget. Он напоминает то что мне надо :). Прогресс пошел, если возникнут трудности, то запощу их сюда!

Всем спасибо!

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