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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableWidget ну оочень медленно  (Прочитано 8344 раз)
SABROG
Гость
« : Май 09, 2007, 00:04 »

Сначала подготовил код для редактора таблицы на основе QTableView. Потом подумал зачем извращаться с "моделями", удалил код и переписал под QTableWidget. 2000 записей с построчной записью пишется секунд 15. Планируется выводить в будещм до 300000 записей. Но видимо с такими скоростями мне это не светит. Вижу, что народ рекомендует использовать в таких случаях model based таблицы. Опять чтоль переписывать все под QTableView Грустный ?

Есть какие-нибудь решения как ускорить вывод записей ? Планируется работа с большими объемами данных...

добавлено спустя 5 часов 42 минуты:

 Разобрался в чем дело. Построчное добавление элементов в таблицу ну очень медленное, поэтому если надо добавить кучу элементов, то сначала надо узнать будущее количество строк и установить для QTableWidget это количество.

Код:

                                int rows = 0;
                                while (query.next()) rows++; // подсчитываем количество строк
                                query.seek(-1); // ставим перед первой записью
                                selectFreight.tbwFreights->setRowCount(rows); // устанавливаем будущее число строк
                                int iRows=0;
                                while (query.next())
                                {
                                int inc = query.value(0).toInt();
                                    for (int i=1; i < fieldscount; i++)
                                    {
                                QTableWidgetItem *item = new QTableWidgetItem;
                                item->setData(Qt::DisplayRole,query.value(i));
                                item->setData(Qt::UserRole,qVariantFromValue(inc));
                                selectFreight.tbwFreights->setItem(iRows,i-1,item);
                                    }
                                iRows++;
                                }


Теперь заполнение таблицы на 2000 записей идет не 10 секунд, а 0.1.
Значит 300 000 записей у меня смогут вывестись за 15 секунд.
Надо будет пропробывать еще с моделью.
Записан
SABROG
Гость
« Ответ #1 : Май 09, 2007, 19:04 »

Как и предполагалось, при переходе на model based таблицу я получил выйгрыш в скорости. Теперь 300 000 записей заносятся в таблицу за 5 секунд, против 13 секунд на Item based.
Записан
Gryz
Гость
« Ответ #2 : Май 09, 2007, 23:51 »

интересно, а выигрыш-то из-за чего? где узкое место в виджете? в профалере не смотрел?
Записан
SABROG
Гость
« Ответ #3 : Май 10, 2007, 10:02 »

Цитата: "Gryz"
интересно, а выигрыш-то из-за чего? где узкое место в виджете? в профалере не смотрел?


Знаю про профайлер в MSSQL, в Qt профайлера не видел. Ткни носом.
Записан
bigirbis
Гость
« Ответ #4 : Май 10, 2007, 11:15 »

Выигрыш скорее всего получился по времени выделения памяти. В первом варианте надо было выделить память на все итемы - а это занимает много времени.
Со вторым вариантом надо быть тоже осторожным - если в базе курсор не двунаправленный, то в итоге памяти съестся столько же.
Записан
Gryz
Гость
« Ответ #5 : Май 10, 2007, 11:41 »

Спрашивая про выигрыш имел в виду сравнение виджета и model/view

добавлено спустя 1 минуту:

 SABROG, я имел ввиду сторонний профайлер, например:
http://www.automatedqa.com/products/aqtime/index.asp
Записан
bigirbis
Гость
« Ответ #6 : Май 10, 2007, 12:17 »

To Gryz
Разберись как работает QSqlTableModel. Там данные подкачиваются по мере необходимости. Отсюда - малое потребление памяти и , как следствие, малое время инициализации.
Записан
Gryz
Гость
« Ответ #7 : Май 10, 2007, 12:35 »

Цитата: "bigirbis"
To Gryz
Разберись как работает QSqlTableModel. Там данные подкачиваются по мере необходимости. Отсюда - малое потребление памяти и , как следствие, малое время инициализации.


При чем тут это?

Я спрашивал о:

Цитировать
Как и предполагалось, при переходе на model based таблицу я получил выйгрыш в скорости. Теперь 300 000 записей заносятся в таблицу за 5 секунд, против 13 секунд на Item based.


т.е. о model/view вообще и сравнение с QTableWidget
Записан
SABROG
Гость
« Ответ #8 : Май 10, 2007, 15:46 »

Объясните мне такую вещь. Вот сделал я селект на таблицу, где данных много.
С моделью QSqlTableModel с сервера придет только видимая часть, а по мере прокрутки ползунка остальные данные будут досылаться ? Т.е. если связь с сервером будет потеряна, то я уже не смогу сделать page down и посмотреть чего там внизу, т.к. доступ к курсору потеряется ?
Записан
VZ
Гость
« Ответ #9 : Август 09, 2007, 17:04 »

Цитата: "SABROG"
С моделью QSqlTableModel сТ.е. если связь с сервером будет потеряна, то я уже не смогу сделать page down и посмотреть чего там внизу, т.к. доступ к курсору потеряется ?


типа того. но по смыслу - зачем жить твоему приложению если связь с сервером уже потеряна?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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