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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Долгое создание таблицы.  (Прочитано 5942 раз)
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 - не дождался...
Записан
ритт
Гость
« Ответ #1 : Июнь 08, 2009, 11:23 »

QTableWidget медленный
Записан
spectre71
Гость
« Ответ #2 : Июнь 08, 2009, 11:43 »

Используй QTableView/QAbstractTableModel
Записан
vdann
Гость
« Ответ #3 : Июнь 09, 2009, 10:07 »

...а что тебе мешает заранее создать таблицу нужной размерности и массив item-ов, такой вариант будет быстрее работать..
Записан
SASA
Гость
« Ответ #4 : Июнь 09, 2009, 17:22 »

Используй QTableView/QAbstractTableModel
А будет ли это работать быстрее? Ведь результат будет тот же - большущее окно с кучей едитов.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Июнь 09, 2009, 20:15 »

А будет ли это работать быстрее?

Будет
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
SASA
Гость
« Ответ #6 : Июнь 10, 2009, 16:37 »

Буду пробывать. Давно хотел разобраться с моделями...
Записан
vdann
Гость
« Ответ #7 : Июнь 12, 2009, 11:20 »

...была такая же проблема, только вместо таблицы было дерево, в которое выводился результат поиска,
в начале я заполнял дерево через цикл используя функцию
Код
C++ (Qt)
void insertTopLevelItem ( int index, QTreeWidgetItem * item )
а потом попробовал функцию
Код
C++ (Qt)
void insertTopLevelItems ( int index, const QList<QTreeWidgetItem *> & items )

..результат отличался в разы...
Записан
roachX
Гость
« Ответ #8 : Октябрь 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); //устанавливает точное значение количества строк таблицы после заполнения ее заполнения

}
Записан
daimon
Гость
« Ответ #9 : Ноябрь 05, 2009, 15:09 »

Чтобы хоть не зависал интерфейс  qApp->processEvents(); В замешательстве
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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