Russian Qt Forum
Ноябрь 23, 2024, 08:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: [РЕШЕНО] QTreeWidget  (Прочитано 11112 раз)
OKTA
Гость
« : Август 07, 2014, 10:13 »

Товарищи, приветствую! Что-то сегодня логика не проснулась вместе со мной утром  Плачущий
Добавляю в QTreeWidget кучу айтемов с виджетами - в итоге естественно происходит подвисание интерфейса.
Вопрос - как бы так изловчиться, чтобы показать модальное окно с просьбой подождать или прогрессбар, а в фоне продолжать добавление айтемов?
ProcessEvents использовать?  Непонимающий Загвоздка как раз в том, что происходит добавление айтемов с виджетами и выкинуть в отдельный поток не получается  Злой
« Последнее редактирование: Август 07, 2014, 10:58 от OKTA » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Август 07, 2014, 10:26 »

... и выкинуть в отдельный поток не получается  Злой
Почему "раз заучив надо всегда так делать"? Улыбающийся Никто не мешает показывать тот же QProgressDialog в той же главной нитке, т.е. синхронно - это даже намного проще
Записан
Bepec
Гость
« Ответ #2 : Август 07, 2014, 10:31 »

Выпихиваем на 1 план модальный прогресс бар, потом каждые N итемов делаем qApp->processEvents. Зависания интерфейса не будет. Точнее N определите опытным путём.

К примеру при добавлении 100 итемов можно спокойной через каждый 10 итем.
Записан
OKTA
Гость
« Ответ #3 : Август 07, 2014, 10:58 »

Ну, вы меня успокоили, значит ProcessEvents  Улыбающийся
Вспомнилось вдруг... давненько делал тестовое задание в какой-то фирме и там была аналогичная проблема - и делал как раз через ProcessEvents, но принимающий человек заявил, что это непрофессионально и надо использовать потоки  Веселый
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Август 07, 2014, 11:09 »

Ну, вы меня успокоили, значит ProcessEvents  Улыбающийся
Не слушай их, это костыль.

Выкидываешь QTreeWidget и юзаешь QAbstractItemModel + QTreeView.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
« Ответ #5 : Август 07, 2014, 11:13 »

Аха... И пишешь свой QTreeWidget Улыбающийся

TreeView+ model имеет где то % 30 функционала TreeWidget Улыбающийся 70% переписывать это охохо Веселый
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #6 : Август 07, 2014, 11:18 »

Аха... И пишешь свой QTreeWidget Улыбающийся

TreeView+ model имеет где то % 30 функционала TreeWidget Улыбающийся 70% переписывать это охохо Веселый
А зачем его переписывать? Вьюшка и модель самодостаточны.
Записан
Bepec
Гость
« Ответ #7 : Август 07, 2014, 11:51 »

Повторюсь
Цитировать
TreeView+ model имеет где то % 30 функционала TreeWidget Улыбающийся 70% переписывать это охохо Веселый

Голая View + model заставит тебя переписывать уже имеющийся функционал TreeWidget. Вместо 1 сущности будет две, причём работоспособность данного создания будет целиком на создателе. Т.е. его надо отдебажить, проверить на утечки, потом ещё раз отдебажить. Потом наткнуться на какую нить бяку и ещё пару дней провести в увлекательных "приключения на своём велосипеде".

PS я уверен, что при написании своего QTreeWidget % 80 напишется легко. А вот потом потребуется знание механики => чтение манулов => расширение кругозора => время проведенное с пользой, но... => проект стоит и не движется Веселый
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #8 : Август 07, 2014, 12:30 »

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
OKTA
Гость
« Ответ #9 : Август 07, 2014, 12:35 »

Сейчас попробую!
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #10 : Август 07, 2014, 12:47 »

с кастомной моделью производительность значительно увеличится, особенно при использовании виджетов в айтемах (сам в этом убедился). и далеко не всегда нужно переписывать весь тривиджет.
Да его вообще переписывать не надо. Нужно просто написать свою модель, все остальное сделает вьюшка.
Записан
OKTA
Гость
« Ответ #11 : Август 07, 2014, 16:46 »

На сколько человечно в айтемах модели хранить указатели на виджеты, чтобы потом отрисовывать их в делегате через paint?
Записан
Bepec
Гость
« Ответ #12 : Август 07, 2014, 17:39 »

Я думаю человечно, если это сохранит мне 3-7 часов моего времени Улыбающийся

А если серьёзно - так указатели же. Это ничем не отличается от простой отрисовки в paint'e. Во всяком случае в плане быстродействия.

PS я вот однажды динамический компоновщик писал и ради прикола поставил 10к кнопок на формочку. Вот это был ад Веселый
Записан
OKTA
Гость
« Ответ #13 : Август 07, 2014, 17:46 »

 Смеющийся не, 10К еще рановато для моей конструкции  Смеющийся
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #14 : Август 08, 2014, 06:27 »

На сколько человечно в айтемах модели хранить указатели на виджеты, чтобы потом отрисовывать их в делегате через paint?

а почему не создавать/уничтожать их в нужный момент в делегате?
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.097 секунд. Запросов: 23.