Юрий
Юрий25 августа 2018 г. 12:41

Работа с QTreeView

Добрый вечер.


Хочу реализовать справочник номенклатуры, с разделами и подразделами. Данные хочу брать из базы данных.  Примеры с запросами из БД не нашел.






Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

7
pasagir
  • 26 августа 2018 г. 6:52
  • (ред.)
Тут посмотрите
    Юрий
    • 27 августа 2018 г. 8:40

    Спасибо. В данной статье описывается tableView

      pasagir
      • 27 августа 2018 г. 9:31

      Сам с QTreeView не работал, но рискну предположить, что реализация примерно такая же, как и в QTableView, т.е. по сигналу clicked(QModelIndex) или doubleClicked(QModelIndex), где QModelIndex - индекс ячейки в таблице, в вашем случае - дерева.

      connect(ui->treeView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(openTree(QModelIndex)));
      в слот пихаем SQL-запрос
      void ClassTree::openTree(const QModelIndex & index)
      {
          QString str, //строка для запроса
                        nameString, //строка в которой получаем значение таблицы
                        can;
      
          QSqlQueryModel *modelDiagram;

          modelDiagram = new QSqlQueryModel(this);
      //Получаем значение ячейки ID--- nameString = index.model()->data(index.model()->index(index.row(), index.column())).value<QString>();
      can = index.model()->data(index.model()->index(index.row(), index.column())).value<QString>();
      //Формируем запрос--- str = "SELECT " "DataBaseName.Column1, " "FROM DataBaseName " "WHERE DataBase.Row='" + nameString + "'";//где DataBaseName - ваша БД, в данном случае //состоит из одной таблицы modelDiagram->setQuery(str); while (modelDiagram->canFetchMore())//Считываем все строки из таблицы { //если количество строк больше 256 modelDiagram->fetchMore(); } creatTree();//- функция в которой настраивается внешний вид QTreeView, ну там растяжения всякие и //т.д. }
      проверить сейчас нет возможности, попробуйте, может получится
        Юрий
        • 27 августа 2018 г. 14:37

        А как мне с родителями и детьми быть, если у меня будем много узлов?



          pasagir
          • 27 августа 2018 г. 15:29
          QModelIndex & index - возвращает индекс ячейки по которой кликнули мышкой.

          В строке 

          nameString = index.model()->data(index.model()->index(index.row(), index.column())).value<QString>();

          мы получаем значение, которое записано в этой ячейке. Это значение мы вставляем в строку запроса SQL - это для родителя. Примерно такой же код (для получения значения значения ячейки) пишете для дитяти. Значение nameString нам уже известно - передаете его в функцию для childrena

          nameStringChildren = index.model()->data(index.model()->index(index.row(), index.column())).value<QString>();
          а запрос будет
           strChaild = "SELECT "
                    "DataBaseName.Column6,   "
                    "FROM DataBaseName       "
                    "WHERE DataBase.Row='" + nameString + "'" + "AND CHAILDTABLE='" + nameStringChildren + "'";//CHAILDTABLE - условное название для

           интересующей нас колонки

          т.о. в запросе у вас уже 2 параметра.
            pasagir
            • 29 августа 2018 г. 18:30

            Работает?

              Юрий
              • 2 сентября 2018 г. 9:17

              Так и не получается. Мне нужно с начало загрузить всех родителей, а потом по клику мыши подгружать детей, так? Вопрос как обновить модель уже с детьми? Как сделать две колонки?


              void ReferenceGoods::UpdateTree()
              {
              standardModel = new QStandardItemModel ;
                  QStandardItem * preparedRow = new QStandardItem();
              
                  preparedRow = standardModel->invisibleRootItem();
                  QList<QStandardItem *> rowItems ;
              
                  QStandardItem * preparedColumn = new QStandardItem();
                  QList<QStandardItem *> columnItems ;
              
                  QSqlQuery * tree_goods1 = new QSqlQuery();
                  tree_goods1->prepare("SELECT id_ref_goods, name_ref_goods  FROM ref_goods");
                   if(tree_goods1->exec()){
                      while(tree_goods1->next()){
                              columnItems  << new QStandardItem(tree_goods1->value(0).toString());
                              rowItems  << new QStandardItem(tree_goods1->value(1).toString());
                      }
                  } else {
                      qDebug() << "Ошибка построения списка: " + tree_goods1->lastError().text();
                  }
              
                    preparedRow->appendRows(rowItems);
                    ui->treeView->setModel(standardModel);
                    ui->treeView->expandAll();
              
               }

                Комментарии

                Только авторизованные пользователи могут публиковать комментарии.
                Пожалуйста, авторизуйтесь или зарегистрируйтесь
                AD

                C++ - Тест 004. Указатели, Массивы и Циклы

                • Результат:50баллов,
                • Очки рейтинга-4
                m
                • molni99
                • 26 октября 2024 г. 1:37

                C++ - Тест 004. Указатели, Массивы и Циклы

                • Результат:80баллов,
                • Очки рейтинга4
                m
                • molni99
                • 26 октября 2024 г. 1:29

                C++ - Тест 004. Указатели, Массивы и Циклы

                • Результат:20баллов,
                • Очки рейтинга-10
                Последние комментарии
                i
                innorwall14 ноября 2024 г. 21:26
                Qt/C++ - Урок 031. QCustomPlot - строим график по времени buy generic priligy We can just chat, and we will not lose too much time anyway
                i
                innorwall14 ноября 2024 г. 19:03
                Qt/C++ - Урок 060. Настройка внешнего вида приложения в рантайме I didnt have an issue work colors priligy dapoxetine 60mg revia cost uk August 3, 2022 Reply
                i
                innorwall14 ноября 2024 г. 11:42
                Как Копировать Файлы в Linux If only females relatives with DZ offspring were considered these percentages were 23 order priligy online uk
                i
                innorwall14 ноября 2024 г. 9:09
                Qt/C++ - Урок 068. Hello World с использованием системы сборки CMAKE в CLion ditropan pristiq dosing With the Yankees leading, 4 3, Rivera jogged in from the bullpen to a standing ovation as he prepared for his final appearance in Chicago buy priligy pakistan
                Сейчас обсуждают на форуме
                i
                innorwall14 ноября 2024 г. 3:39
                добавить qlineseries в функции priligy amazon canada 93 GREB1 protein GREB1 AB011147 6
                i
                innorwall11 ноября 2024 г. 10:55
                Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
                9
                9Anonim25 октября 2024 г. 9:10
                Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
                ИМ
                Игорь Максимов3 октября 2024 г. 4:05
                Реализация навигации по разделам Спасибо Евгений!

                Следите за нами в социальных сетях