Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: SASA от Июнь 08, 2009, 11:04



Название: Долгое создание таблицы.
Отправлено: SASA от Июнь 08, 2009, 11:04
Здравствуйте. Столкнулся с проблемой при создании/изменении таблицы.
Таблица - две колонки: в первой - порядковый номер, во второй значение, которое можно изменять.
Код набивки ифы в таблицу
Код:
for (int cou = 0; cou < elems.size(); cou++)
{
ui.elements->insertRow(cou);
ptwi = new QTableWidgetItem(QString::number(cou));
ptwi->setFlags(Qt::ItemIsEnabled);
ui.elements->setItem(cou,0,ptwi);
ptwi = new QTableWidgetItem();
ptwi->setFlags(Qt::ItemIsEnabled | isEdit);
ptwi->setData(Qt::EditRole|Qt::DisplayRole,elems[cou]);
ui.elements->setItem(cou,1,ptwi);
}
elems - лист интов или строк или даблов.
Если элементов 100, то этот цикл выполняется секунд 5.
А если 10000 - не дождался...


Название: Re: Долгое создание таблицы.
Отправлено: ритт от Июнь 08, 2009, 11:23
QTableWidget медленный


Название: Re: Долгое создание таблицы.
Отправлено: spectre71 от Июнь 08, 2009, 11:43
Используй QTableView/QAbstractTableModel


Название: Re: Долгое создание таблицы.
Отправлено: vdann от Июнь 09, 2009, 10:07
...а что тебе мешает заранее создать таблицу нужной размерности и массив item-ов, такой вариант будет быстрее работать..


Название: Re: Долгое создание таблицы.
Отправлено: SASA от Июнь 09, 2009, 17:22
Используй QTableView/QAbstractTableModel
А будет ли это работать быстрее? Ведь результат будет тот же - большущее окно с кучей едитов.


Название: Re: Долгое создание таблицы.
Отправлено: pastor от Июнь 09, 2009, 20:15
А будет ли это работать быстрее?

Будет


Название: Re: Долгое создание таблицы.
Отправлено: SASA от Июнь 10, 2009, 16:37
Буду пробывать. Давно хотел разобраться с моделями...


Название: Re: Долгое создание таблицы.
Отправлено: vdann от Июнь 12, 2009, 11:20
...была такая же проблема, только вместо таблицы было дерево, в которое выводился результат поиска,
в начале я заполнял дерево через цикл используя функцию
Код
C++ (Qt)
void insertTopLevelItem ( int index, QTreeWidgetItem * item )
а потом попробовал функцию
Код
C++ (Qt)
void insertTopLevelItems ( int index, const QList<QTreeWidgetItem *> & items )

..результат отличался в разы...


Название: Re: Долгое создание таблицы.
Отправлено: roachX от Октябрь 31, 2009, 19:18
Столкнулся с такой же проблемой, поставил костыли.
Может неспортивно, зато результат того стоит.
код:

Код:
 
int bases = 0;
         
while (........) {
   if(bases == ui->tableWidget->rowCount()-1)  //взамен тормоза InsertRow();. Заодно и все приложение вдвое меньше оперативной памяти ест.
                                       {
                                        ui->tableWidget->setRowCount(ui->tableWidget->rowCount()+2000);
                                        }
               bases++;
                                        }


     }
        ui->tableWidget->setRowCount(bases); //устанавливает точное значение количества строк таблицы после заполнения ее заполнения

}


Название: Re: Долгое создание таблицы.
Отправлено: daimon от Ноябрь 05, 2009, 15:09
Чтобы хоть не зависал интерфейс  qApp->processEvents(); :-\