Название: QTreeWidgetItem::setText() тормозит Отправлено: Racheengel от Март 30, 2010, 11:21 всем привет,
у меня вопрос: замечал ли кто в Qt 4.5/4.6 торможение при выполнении QTreeWidgetItem::setText(0, "text")? при заполнении QTreeWidget итемами, после где-то 20-30 штук итемов, начинаются жуткие тормоза. Причем только когда устанавливается текст 0-й колонке (для 1,2 и последующих все работает нормально). очень странный баг, проявляется и в винде, и в линуксе... Название: Re: QTreeWidgetItem::setText() тормозит Отправлено: Пантер от Март 30, 2010, 11:35 Используй MVC. Или отключи отрисовку на время заполнения.
Название: Re: QTreeWidgetItem::setText() тормозит Отправлено: GreatSnake от Март 30, 2010, 11:36 Сортировку перед изменением элементов отключаете?
Ещё может влиять режим QHeaderView::ResizeToContents. Название: Re: QTreeWidgetItem::setText() тормозит Отправлено: Racheengel от Март 30, 2010, 11:45 сортировка, отрисовка, сигналы - все отключено.
ресайз хедера тоже выключал. setUniformRowHeights(true) сделал. не помогает ничего... Название: Re: QTreeWidgetItem::setText() тормозит Отправлено: Пантер от Март 30, 2010, 11:48 Закинь сюда компилябельный пример.
Название: Re: QTreeWidgetItem::setText() тормозит Отправлено: Racheengel от Март 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); Название: Re: QTreeWidgetItem::setText() тормозит Отправлено: GreatSnake от Март 30, 2010, 12:38 Я бы ещё отказался от использования QTreeWidgetItem::setData() для своих нужд, т.к. он очень тажелый, если не требуется через сигнал QTreeWidget::itemChanged() следить за изменением свойств ячейки.
Намного оптимальнее будет перегрузить QTreeWidgetItem. Название: Re: QTreeWidgetItem::setText() тормозит Отправлено: Racheengel от Март 30, 2010, 12:46 да, я тоже думаю заменить 4 setData() одним... просто нужно в хэндлер клика по итему передавать эти данные...
|