Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разъяснение QTreeWidget [QT] 
:(
    Опции темы
xAndeRx
Дата 3.3.2015, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 3.3.2015

Репутация: нет
Всего: нет



Доброй ночи всем. 
У меня такая задача, построить дерево, из последовательности чисел. Закономерность разделения на узлах не важна, это на усмотрение. Меня интересует сейчас другое.
Я новичок в плане QT, использую QT Creator. Нашел виджет TreeWidget, подходящий под мою задачу, но не могу разобраться как с ним справиться. То есть, как в него занести определенную последовательность чисел и разбить на узлы дерева. 

Подкиньте кто простенький пример, как занести в этот виджет данные и уже от этого я смогу отталкиваться, чтобы разобраться в этом. 
Буду очень благодарен.  smile 

Это сообщение отредактировал(а) xAndeRx - 3.3.2015, 23:44
PM MAIL   Вверх
math64
Дата 4.3.2015, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Примеры есть в самом Qt. Поищите QTreeWidget в каталоге примеров.
Еще можно в редакторе форм заполнить QTreeWidget своими данными, откомпилировать и посмотреть на код сгенрированный в ui_mainwindow.h.
PM   Вверх
xAndeRx
Дата 4.3.2015, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 3.3.2015

Репутация: нет
Всего: нет



Цитата(math64 @ 4.3.2015,  09:19)
Примеры есть в самом Qt. Поищите QTreeWidget в каталоге примеров.
Еще можно в редакторе форм заполнить QTreeWidget своими данными, откомпилировать и посмотреть на код сгенрированный в ui_mainwindow.h.

Создал через редактор, как вы посоветовали, понял что и к чему написано в коде ниже. Но тут же возник вопрос, как мне вручную прописывать это?(а не через редактор). То есть, чтобы была программа которая, после введения чисел раскидывала бы их в эти колонки? 
Мне же это нужно писать в MainWindow.cpp.
Код

<widget class="QWidget" name="page_2">
     <widget class="QTreeWidget" name="treeWidget">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>811</width>
        <height>521</height>
       </rect>
      </property>
      <column>
       <property name="text">
        <string>Первый</string>
       </property>
      </column>
      <item>
       <property name="text">
        <string>Первый.1</string>
       </property>
       <item>
        <property name="text">
         <string>Первый 1.1</string>
        </property>
       </item>
       <item>
        <property name="text">
         <string>Первый 1.2</string>
        </property>
       </item>
       <item>
        <property name="text">
         <string>Первый 1.3</string>
        </property>
       </item>
      </item>
      <item>
       <property name="text">
        <string>Первый.2</string>
       </property>
       <item>
        <property name="text">
         <string>Первый 2.1</string>
        </property>
       </item>
       <item>
        <property name="text">
         <string>Первый 2.2</string>
        </property>
       </item>
       <item>
        <property name="text">
         <string>Первый 2.3</string>
        </property>
       </item>
      </item>
      <item>
       <property name="text">
        <string>Первый.3</string>
       </property>
       <item>
        <property name="text">
         <string>Первый 3.1</string>
        </property>
       </item>
       <item>
        <property name="text">
         <string>Первый 3.2</string>
        </property>
       </item>
       <item>
        <property name="text">
         <string>Первый 3.3</string>
        </property>
       </item>
      </item>
     </widget>
    </widget>
   </widget>
  </widget>

PM MAIL   Вверх
math64
Дата 5.3.2015, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



При компиляции по mainform.ui, приведённому вами, генерируется ui_mainwindow.h .
Встаньте на строчку #include "ui_mainwindow.h" в mainform.cpp и нажмите F2.
Код, подобный сгенерированному, вам нужно создавать вручную.
setupUi создает виджеты, retranslateUi создает строки с учетом возможности переключения языка, но не учитывает, что содержмиое treeWidget пожет поменяться при работе программы.
Вам это деление делать необязательно, все можно сделать в конструкторе MainWindow.
Русские буквы в генерированном коде будут заменены на такие - "\320\236\321\202\320\272\321\200\321\213\321\202\321\214" ("Открыть"), поэтому для исследования лучше вводить  текст на английском.

PM   Вверх
Amp
Дата 5.3.2015, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 7
Всего: 17



Можно же проще, в дизайнере выбрать "Форма" -> "Показать код"
PM MAIL   Вверх
xAndeRx
Дата 5.3.2015, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 3.3.2015

Репутация: нет
Всего: нет



Немного продвинулся и уже создал некое дерево из элементов. Выстроенных по правилу: 
1)Вершина - минимальный элемент (и сортировка идет чем ниже дерево, тем больше значение элемента.
2)Потом деление на четные и нечетные
3)И все полученные цифры сгруппировать, если они одинаковые.(то есть, если есть три экземпляра числа "10" то 1-ое число сделать узлом и в его child остальные 2 засунуть.

Так вот с 3-им пунктом проблемка... Не пойму как при встрече одинаковых элементов(у меня массив отсортирован, то есть все одинаковые идут подряд), запихнуть последующие в child первого. 



Мой вариант: 
Код

void MainWindow::on_pushButton_5_clicked()
{
     const int ArrSize = 50;
     srand(time(NULL));
     int ArrayTwo[ArrSize];
     for (int i=0; i<ArrSize; i++)
     {
         ArrayTwo[i] = (rand() % 100)-50;
     }
     QString ArrayOne[ArrSize];

     ui->treeWidget->setColumnCount(1);

     ui->treeWidget->addTopLevelItem(One);

     //Сортировка
     int buffer = ArrayTwo[0];
     for (int i=0; i<ArrSize; i++)
     {
         for (int j=0; j<ArrSize; j++)
         {
             if (ArrayTwo[i]<ArrayTwo[j])
             {
                 buffer = ArrayTwo[i];
                 ArrayTwo[i]=ArrayTwo[j];
                 ArrayTwo[j]=buffer;
             }
         }
     }
     //Перевод массива int в массив QString
     for (int i=0; i<ArrSize; i++)
     {
         for (int j=0; j<ArrSize; j++)
         {
            ArrayOne[i] =QString::number(ArrayTwo[i]);
         }
     }
 
     //Занесение массива в дерево
     One->setText(0,ArrayOne[0]);
     for (int i=1; i<ArrSize; i++)
     {
         if (count1 != 2)
         {
             if (ArrayTwo[i] % 2 == 0)
             {
                 if (count == 0 )
                 {
                     Two->setText(0,ArrayOne[i]);
                     One->addChild(Two);
                     count=1;
                     count1++;
                 }
             }
             if (ArrayTwo[i] % 2 != 0)
             {
                 if (count == 1)
                 {
                     Three->setText(0,ArrayOne[i]);
                     One->addChild(Three);
                     count=2;
                     count1++;
                 }
             }
         }
         else if (count1 == 2)
         {
                 if (ArrayTwo[i] % 2 == 0)
                 {
                     if (ArrayTwo[i] == ArrayTwo[i-1])//ВОТ ТУТ ПРОБУЮ СДЕЛАТЬ ПРОВЕРКУ НА ОДИНАКОВЫЕ ЭЛЕМЕНТЫ,
 //но к какому Child'y тут нужно присваивать? Как я сделал, не работает.
                     {
                         QTreeWidgetItem *Fourth = new QTreeWidgetItem;
                         QTreeWidgetItem *Child = new QTreeWidgetItem;
                         Child->setText(0,ArrayOne[i]);
                         Fourth->addChild(Child);
                     }
                     else
                     {
                         QTreeWidgetItem *Fourth = new QTreeWidgetItem;
                         Fourth->setText(0,ArrayOne[i]);
                         Two->addChild(Fourth);
                     }
                 }

                 if (ArrayTwo[i] % 2 !=0)
                 {
                     QTreeWidgetItem *Fifth = new QTreeWidgetItem;
                     Fifth->setText(0,ArrayOne[i]);
                     Three->addChild(Fifth);
                 }
         }
    }


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0634 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.