Russian Qt Forum
Ноябрь 24, 2024, 02:38
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
QTreeWidgetItem::setText() тормозит
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QTreeWidgetItem::setText() тормозит (Прочитано 6625 раз)
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
QTreeWidgetItem::setText() тормозит
«
:
Март 30, 2010, 11:21 »
всем привет,
у меня вопрос: замечал ли кто в Qt 4.5/4.6 торможение при выполнении QTreeWidgetItem::setText(0, "text")?
при заполнении QTreeWidget итемами, после где-то 20-30 штук итемов, начинаются жуткие тормоза. Причем только когда устанавливается текст 0-й колонке (для 1,2 и последующих все работает нормально).
очень странный баг, проявляется и в винде, и в линуксе...
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: QTreeWidgetItem::setText() тормозит
«
Ответ #1 :
Март 30, 2010, 11:35 »
Используй MVC. Или отключи отрисовку на время заполнения.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: QTreeWidgetItem::setText() тормозит
«
Ответ #2 :
Март 30, 2010, 11:36 »
Сортировку перед изменением элементов отключаете?
Ещё может влиять режим QHeaderView::ResizeToContents.
«
Последнее редактирование: Март 30, 2010, 11:42 от GreatSnake
»
Записан
Qt 5.11/4.8.7 (X11/Win)
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: QTreeWidgetItem::setText() тормозит
«
Ответ #3 :
Март 30, 2010, 11:45 »
сортировка, отрисовка, сигналы - все отключено.
ресайз хедера тоже выключал.
setUniformRowHeights(true) сделал.
не помогает ничего...
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: QTreeWidgetItem::setText() тормозит
«
Ответ #4 :
Март 30, 2010, 11:48 »
Закинь сюда компилябельный пример.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: QTreeWidgetItem::setText() тормозит
«
Ответ #5 :
Март 30, 2010, 12:24 »
методом супертыка, помогло следующее:
// до заполнения TreeWidget:
ui.treeView->header()->setResizeMode(0, QHeaderView::Fixed);
ui.treeView->header()->setResizeMode(1, QHeaderView::Fixed);
ui.treeView->header()->setResizeMode(2, QHeaderView::Fixed);
// тут заполняем...
for (int i = 0; i < 1000; i++)
{
QTreeWidgetItem *item = new QTreeWidgetItem(ui.treeView);
item->setText(0, QString("%1").arg(i+1));
item->setText(1, "some text");
item->setText(2, "some text");
item->setData(0,1000,0);
item->setData(0,1001,0);
item->setData(0,1002,0);
item->setData(0,1003,0);
item->setBackground(0, Qt::gray);
item->setBackground(2, Qt::gray);
ui.treeView->addTopLevelItem(item);
}
// после заполнения TreeWidget:
ui.treeView->header()->setResizeMode(0, QHeaderView::ResizeToContents);
ui.treeView->header()->setResizeMode(1, QHeaderView::ResizeToContents);
ui.treeView->header()->setResizeMode(2, QHeaderView::ResizeToContents);
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: QTreeWidgetItem::setText() тормозит
«
Ответ #6 :
Март 30, 2010, 12:38 »
Я бы ещё отказался от использования QTreeWidgetItem::setData() для своих нужд, т.к. он очень тажелый, если не требуется через сигнал QTreeWidget::itemChanged() следить за изменением свойств ячейки.
Намного оптимальнее будет перегрузить QTreeWidgetItem.
Записан
Qt 5.11/4.8.7 (X11/Win)
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: QTreeWidgetItem::setText() тормозит
«
Ответ #7 :
Март 30, 2010, 12:46 »
да, я тоже думаю заменить 4 setData() одним... просто нужно в хэндлер клика по итему передавать эти данные...
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...