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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTreeWidgetItem::setText() тормозит  (Прочитано 6583 раз)
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« : Март 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 Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #1 : Март 30, 2010, 11:35 »

Используй MVC. Или отключи отрисовку на время заполнения.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Март 30, 2010, 11:36 »

Сортировку перед изменением элементов отключаете?
Ещё может влиять режим QHeaderView::ResizeToContents.
« Последнее редактирование: Март 30, 2010, 11:42 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #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 Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #4 : Март 30, 2010, 11:48 »

Закинь сюда компилябельный пример.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #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 Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Март 30, 2010, 12:38 »

Я бы ещё отказался от использования QTreeWidgetItem::setData() для своих нужд, т.к. он очень тажелый, если не требуется через сигнал QTreeWidget::itemChanged() следить за изменением свойств ячейки.
Намного оптимальнее будет перегрузить QTreeWidgetItem.
Записан

Qt 5.11/4.8.7 (X11/Win)
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #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]   Вверх
  Печать  
 
Перейти в:  


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