Russian Qt Forum
Ноябрь 23, 2024, 08:22
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Model-View (MV)
>
[РЕШЕНО] QTreeWidget
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: [РЕШЕНО] QTreeWidget (Прочитано 11109 раз)
OKTA
Гость
[РЕШЕНО] QTreeWidget
«
:
Август 07, 2014, 10:13 »
Товарищи, приветствую! Что-то сегодня логика не проснулась вместе со мной утром
Добавляю в QTreeWidget кучу айтемов с виджетами - в итоге естественно происходит подвисание интерфейса.
Вопрос - как бы так изловчиться, чтобы показать модальное окно с просьбой подождать или прогрессбар, а в фоне продолжать добавление айтемов?
ProcessEvents использовать?
Загвоздка как раз в том, что происходит добавление айтемов с виджетами и выкинуть в отдельный поток не получается
«
Последнее редактирование: Август 07, 2014, 10:58 от OKTA
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QTreeWidget
«
Ответ #1 :
Август 07, 2014, 10:26 »
Цитата: OKTA от Август 07, 2014, 10:13
... и выкинуть в отдельный поток не получается
Почему "раз заучив надо всегда так делать"?
Никто не мешает показывать тот же QProgressDialog в той же главной нитке, т.е. синхронно - это даже намного проще
Записан
Bepec
Гость
Re: QTreeWidget
«
Ответ #2 :
Август 07, 2014, 10:31 »
Выпихиваем на 1 план модальный прогресс бар, потом каждые N итемов делаем qApp->processEvents. Зависания интерфейса не будет. Точнее N определите опытным путём.
К примеру при добавлении 100 итемов можно спокойной через каждый 10 итем.
Записан
OKTA
Гость
Re: QTreeWidget
«
Ответ #3 :
Август 07, 2014, 10:58 »
Ну, вы меня успокоили, значит ProcessEvents
Вспомнилось вдруг... давненько делал тестовое задание в какой-то фирме и там была аналогичная проблема - и делал как раз через ProcessEvents, но принимающий человек заявил, что это непрофессионально и надо использовать потоки
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: [РЕШЕНО] QTreeWidget
«
Ответ #4 :
Август 07, 2014, 11:09 »
Цитата: OKTA от Август 07, 2014, 10:58
Ну, вы меня успокоили, значит ProcessEvents
Не слушай их, это костыль.
Выкидываешь QTreeWidget и юзаешь QAbstractItemModel + QTreeView.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
Re: [РЕШЕНО] QTreeWidget
«
Ответ #5 :
Август 07, 2014, 11:13 »
Аха... И пишешь свой QTreeWidget
TreeView+ model имеет где то % 30 функционала TreeWidget
70% переписывать это охохо
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: [РЕШЕНО] QTreeWidget
«
Ответ #6 :
Август 07, 2014, 11:18 »
Цитата: Bepec от Август 07, 2014, 11:13
Аха... И пишешь свой QTreeWidget
TreeView+ model имеет где то % 30 функционала TreeWidget
70% переписывать это охохо
А зачем его переписывать? Вьюшка и модель самодостаточны.
Записан
Bepec
Гость
Re: [РЕШЕНО] QTreeWidget
«
Ответ #7 :
Август 07, 2014, 11:51 »
Повторюсь
Цитировать
TreeView+ model имеет где то % 30 функционала TreeWidget
70% переписывать это охохо
Голая View + model заставит тебя переписывать уже имеющийся функционал TreeWidget. Вместо 1 сущности будет две, причём работоспособность данного создания будет целиком на создателе. Т.е. его надо отдебажить, проверить на утечки, потом ещё раз отдебажить. Потом наткнуться на какую нить бяку и ещё пару дней провести в увлекательных "приключения на своём велосипеде".
PS я уверен, что при написании своего QTreeWidget % 80 напишется легко. А вот потом потребуется знание механики => чтение манулов => расширение кругозора => время проведенное с пользой, но... => проект стоит и не движется
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: [РЕШЕНО] QTreeWidget
«
Ответ #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
Гость
Re: [РЕШЕНО] QTreeWidget
«
Ответ #9 :
Август 07, 2014, 12:35 »
Сейчас попробую!
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: [РЕШЕНО] QTreeWidget
«
Ответ #10 :
Август 07, 2014, 12:47 »
Цитата: kambala от Август 07, 2014, 12:30
с кастомной моделью производительность значительно увеличится, особенно при использовании виджетов в айтемах (сам в этом убедился). и далеко не всегда нужно переписывать весь тривиджет.
Да его вообще переписывать не надо. Нужно просто написать свою модель, все остальное сделает вьюшка.
Записан
OKTA
Гость
Re: [РЕШЕНО] QTreeWidget
«
Ответ #11 :
Август 07, 2014, 16:46 »
На сколько человечно в айтемах модели хранить указатели на виджеты, чтобы потом отрисовывать их в делегате через paint?
Записан
Bepec
Гость
Re: [РЕШЕНО] QTreeWidget
«
Ответ #12 :
Август 07, 2014, 17:39 »
Я думаю человечно, если это сохранит мне 3-7 часов моего времени
А если серьёзно - так указатели же. Это ничем не отличается от простой отрисовки в paint'e. Во всяком случае в плане быстродействия.
PS я вот однажды динамический компоновщик писал и ради прикола поставил 10к кнопок на формочку. Вот это был ад
Записан
OKTA
Гость
Re: [РЕШЕНО] QTreeWidget
«
Ответ #13 :
Август 07, 2014, 17:46 »
не, 10К еще рановато для моей конструкции
Записан
Johnik
Крякер
Offline
Сообщений: 339
Re: [РЕШЕНО] QTreeWidget
«
Ответ #14 :
Август 08, 2014, 06:27 »
Цитата: OKTA от Август 07, 2014, 16:46
На сколько человечно в айтемах модели хранить указатели на виджеты, чтобы потом отрисовывать их в делегате через paint?
а почему не создавать/уничтожать их в нужный момент в делегате?
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...