GF
Glep Fingerman7. Oktober 2016 13:20

Хранение QWidget в QList

QTreeWidgetItem

Всем здравствуйте, есть такая проблема – как организовать хранение QWidget в QList? Проблема заключается в том, что при попытке получить данные из QList возникает ошибка (параметр size() не доступен). Код примерно такой:

// получаю объект для отрисовки QWidget из QList другого объекта 
MyObject *fromQList = dynamic_cast<MyObject*>(OtherObject->MyObjectList.at(i));
// начинаю связывать элемент списка с моим виджетом для отображения в списке
QListWidgetItem* item = new QListWidgetItem;
//вот здесь происходит ошибка, подозреваю что виджет, полученный из List надо как-то проинициализировать, т.к. он изначально не отрисован, как быть в данной ситуации - не могу разобраться.
item.setSizeHint(fromQList.size());

У кого какие мысли по этому поводу?

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

6
Evgenii Legotckoi
  • 7. Oktober 2016 13:44

Добрый день.
Первое, что сейчас заметно.
Вызов методов в данном коде не верный. Объекты созданы по указателю, а методы вызываете, будто объекты находятся в стеке.
Поменяйте код на следующий:

// получаю объект для отрисовки QWidget из QList другого объекта 
MyObject *fromQList = dynamic_cast<MyObject*>(OtherObject->MyObjectList.at(i));
// начинаю связывать элемент списка с моим виджетом для отображения в списке
QListWidgetItem* item = new QListWidgetItem;
//вот здесь происходит ошибка, подозреваю что виджет, полученный из List надо как-то проинициализировать, т.к. он изначально не отрисован, как быть в данной ситуации - не могу разобраться.
item->setSizeHint(fromQList->size()); 

 

    GF
    • 13. Oktober 2016 08:01

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

    С уважением, Константин.

    forevilveg-1.zip

      Evgenii Legotckoi
      • 14. Oktober 2016 09:43

      Как бы вообще никак не описали проблему.

      У вас Out of Range Ошибка в QList, в цикле for.

      Написано так:
      for(int i=0; i <= selectedRoot->ChildClassList.size(); ++i)

      А надо так:
      for(int i=0; i < selectedRoot->ChildClassList.size(); ++i)

      А вообще, всё равно замучаетесь с этим QListWidget. Поскольку
      ui->listWidgetChild->clear();
      будет удалять все объекты ещё и из памяти, то есть будет портить память в ChildClassList, об этом сказано в описании этого метода в официальной документации.

      Так, что при повторной попытке создания списка получите ошибку Segmentation Fault.

      Рекомендую попробовать реализовать либо через QListView, там надо будет использовать модель данных, либо через QScrollArea, в которую будет помещаться QVBoxLayout и уже в него помещать виджеты.

        GF
        • 24. Oktober 2016 16:59

        Спасибо за совет, переделал через модель-представление.

        Теперь вопрос не совсем по теме: как мне создать собственный класс, базирующийся на QTreeWidgetItem, т.е. мне нужны кастомные параметры объектов QTreeWidgetItem для упрощения взаимодействия с ними.

          Evgenii Legotckoi
          • 25. Oktober 2016 08:28
          • Die Antwort wurde als Lösung markiert.

          ммм. Наследоваться от QTreeWidgetItem и добавить требуемые кастомные поля.

          class CustomTreeWidgetItem : public QTreeWidgetItem
          {
          public:
              explicit CustomTreeWidgetItem(QTreeWidget* treeWidget);
           
          private:
              int customVariable;
          };

          Вопрос не совсем корректно задан. Не ясно, что хотите получить в итоге.

            GF
            • 25. Oktober 2016 11:48
            Вы все правильно поняли, спасибо, вопрос решен.

              Kommentare

              Nur autorisierte Benutzer können Kommentare posten.
              Bitte Anmelden oder Registrieren
              Letzte Kommentare
              A
              ALO1ZE19. Oktober 2024 08:19
              Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
              ИМ
              Игорь Максимов5. Oktober 2024 07:51
              Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
              d
              dblas55. Juli 2024 11:02
              QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
              k
              kmssr8. Februar 2024 18:43
              Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
              Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
              Jetzt im Forum diskutieren
              J
              JacobFib17. Oktober 2024 03:27
              добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
              JW
              Jhon Wick1. Oktober 2024 15:52
              Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
              КГ
              Кирилл Гусарев27. September 2024 09:09
              Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
              F
              Fynjy22. Juli 2024 04:15
              при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

              Folgen Sie uns in sozialen Netzwerken