Название: [РЕШЕНО] QTreeWidget Отправлено: OKTA от Август 07, 2014, 10:13 Товарищи, приветствую! Что-то сегодня логика не проснулась вместе со мной утром :'(
Добавляю в QTreeWidget кучу айтемов с виджетами - в итоге естественно происходит подвисание интерфейса. Вопрос - как бы так изловчиться, чтобы показать модальное окно с просьбой подождать или прогрессбар, а в фоне продолжать добавление айтемов? ProcessEvents использовать? ??? Загвоздка как раз в том, что происходит добавление айтемов с виджетами и выкинуть в отдельный поток не получается >:( Название: Re: QTreeWidget Отправлено: Igors от Август 07, 2014, 10:26 ... и выкинуть в отдельный поток не получается >:( Почему "раз заучив надо всегда так делать"? :) Никто не мешает показывать тот же QProgressDialog в той же главной нитке, т.е. синхронно - это даже намного прощеНазвание: Re: QTreeWidget Отправлено: Bepec от Август 07, 2014, 10:31 Выпихиваем на 1 план модальный прогресс бар, потом каждые N итемов делаем qApp->processEvents. Зависания интерфейса не будет. Точнее N определите опытным путём.
К примеру при добавлении 100 итемов можно спокойной через каждый 10 итем. Название: Re: QTreeWidget Отправлено: OKTA от Август 07, 2014, 10:58 Ну, вы меня успокоили, значит ProcessEvents :)
Вспомнилось вдруг... давненько делал тестовое задание в какой-то фирме и там была аналогичная проблема - и делал как раз через ProcessEvents, но принимающий человек заявил, что это непрофессионально и надо использовать потоки :D Название: Re: [РЕШЕНО] QTreeWidget Отправлено: Пантер от Август 07, 2014, 11:09 Ну, вы меня успокоили, значит ProcessEvents :) Не слушай их, это костыль.Выкидываешь QTreeWidget и юзаешь QAbstractItemModel + QTreeView. Название: Re: [РЕШЕНО] QTreeWidget Отправлено: Bepec от Август 07, 2014, 11:13 Аха... И пишешь свой QTreeWidget :)
TreeView+ model имеет где то % 30 функционала TreeWidget :) 70% переписывать это охохо :D Название: Re: [РЕШЕНО] QTreeWidget Отправлено: Old от Август 07, 2014, 11:18 Аха... И пишешь свой QTreeWidget :) А зачем его переписывать? Вьюшка и модель самодостаточны.TreeView+ model имеет где то % 30 функционала TreeWidget :) 70% переписывать это охохо :D Название: Re: [РЕШЕНО] QTreeWidget Отправлено: Bepec от Август 07, 2014, 11:51 Повторюсь
Цитировать TreeView+ model имеет где то % 30 функционала TreeWidget :) 70% переписывать это охохо :D Голая View + model заставит тебя переписывать уже имеющийся функционал TreeWidget. Вместо 1 сущности будет две, причём работоспособность данного создания будет целиком на создателе. Т.е. его надо отдебажить, проверить на утечки, потом ещё раз отдебажить. Потом наткнуться на какую нить бяку и ещё пару дней провести в увлекательных "приключения на своём велосипеде". PS я уверен, что при написании своего QTreeWidget % 80 напишется легко. А вот потом потребуется знание механики => чтение манулов => расширение кругозора => время проведенное с пользой, но... => проект стоит и не движется :D Название: Re: [РЕШЕНО] QTreeWidget Отправлено: kambala от Август 07, 2014, 12:30 с кастомной моделью производительность значительно увеличится, особенно при использовании виджетов в айтемах (сам в этом убедился). и далеко не всегда нужно переписывать весь тривиджет.
Название: Re: [РЕШЕНО] QTreeWidget Отправлено: OKTA от Август 07, 2014, 12:35 Сейчас попробую!
Название: Re: [РЕШЕНО] QTreeWidget Отправлено: Old от Август 07, 2014, 12:47 с кастомной моделью производительность значительно увеличится, особенно при использовании виджетов в айтемах (сам в этом убедился). и далеко не всегда нужно переписывать весь тривиджет. Да его вообще переписывать не надо. Нужно просто написать свою модель, все остальное сделает вьюшка.Название: Re: [РЕШЕНО] QTreeWidget Отправлено: OKTA от Август 07, 2014, 16:46 На сколько человечно в айтемах модели хранить указатели на виджеты, чтобы потом отрисовывать их в делегате через paint?
Название: Re: [РЕШЕНО] QTreeWidget Отправлено: Bepec от Август 07, 2014, 17:39 Я думаю человечно, если это сохранит мне 3-7 часов моего времени :)
А если серьёзно - так указатели же. Это ничем не отличается от простой отрисовки в paint'e. Во всяком случае в плане быстродействия. PS я вот однажды динамический компоновщик писал и ради прикола поставил 10к кнопок на формочку. Вот это был ад :D Название: Re: [РЕШЕНО] QTreeWidget Отправлено: OKTA от Август 07, 2014, 17:46 ;D не, 10К еще рановато для моей конструкции ;D
Название: Re: [РЕШЕНО] QTreeWidget Отправлено: Johnik от Август 08, 2014, 06:27 На сколько человечно в айтемах модели хранить указатели на виджеты, чтобы потом отрисовывать их в делегате через paint? а почему не создавать/уничтожать их в нужный момент в делегате? Название: Re: [РЕШЕНО] QTreeWidget Отправлено: Bepec от Август 08, 2014, 13:08 Потому что делегат именно это и делает :D Вот только не всегда нужно "создавать по случаю", иногда ещё нужно чтобы все видимые ячейки имели уже созданный виджет.
Название: Re: [РЕШЕНО] QTreeWidget Отправлено: Old от Август 08, 2014, 13:31 иногда ещё нужно чтобы все видимые ячейки имели уже созданный виджет. Это для чего, например?Название: Re: [РЕШЕНО] QTreeWidget Отправлено: Bepec от Август 08, 2014, 13:33 Открываем торрент - видим поле со звёздочками. Если создавать и уничтожать их динамически, это съест больше ресурсов, чем просто их отрисовка. Тем более тогда возникает проблема с прокручиваниями (вроде). Пробовал я динамикой их создавать, прокрутка на конец списка выводит комп на суперпозицию вроде работает, а вроде нет :D
Название: Re: [РЕШЕНО] QTreeWidget Отправлено: Old от Август 08, 2014, 13:35 Открываем торрент - видим поле со звёздочками. Если создавать и уничтожать их динамически, это съест больше ресурсов, чем просто их отрисовка. Тем более тогда возникает проблема с прокручиваниями (вроде). Пробовал я динамикой их создавать, прокрутка на конец списка выводит комп на суперпозицию вроде работает, а вроде нет :D Вот именно для этого и нужны делегаты.Даже в Qt-шных примерах это делает делегат. Никакого смысла в 100500 виджетах для каждой ячейки нет. Название: Re: [РЕШЕНО] QTreeWidget Отправлено: Bepec от Август 08, 2014, 14:14 Ну делегат позволяет только отрисовывать. Реагировать на что-либо и получать сигналы может он лишь когда ты ручками пропишешь. А виджет снимает эту нагрузку.
Название: Re: [РЕШЕНО] QTreeWidget Отправлено: Old от Август 08, 2014, 14:15 Ну делегат позволяет только отрисовывать. Реагировать на что-либо и получать сигналы может он лишь когда ты ручками пропишешь. А виджет снимает эту нагрузку. Так делегат и виджеты создает. только не 100500, а один - активный в текущий момент.Название: Re: [РЕШЕНО] QTreeWidget Отправлено: kambala от Август 08, 2014, 18:42 Открываем торрент - видим поле со звёздочками. какой торрент и какие звездочки?Название: Re: [РЕШЕНО] QTreeWidget Отправлено: Bepec от Август 08, 2014, 18:59 to Kambala - в некоторых версиях торрентов имеется поле "популярность" у торрента. Оно отображается в виде звёзд от 1 до 5/10 :)
Название: Re: [РЕШЕНО] QTreeWidget Отправлено: kambala от Август 08, 2014, 19:01 я этот столбик отключил как только его увидел
|