Добавление строки в QTableView замедляет работу приложения после большого количества вставок - PullRequest
1 голос
/ 20 января 2012

У меня есть QTableView, который использует созданную мной модель, которая расширяет QAbstractTableModel.Модель использует

QList< QVector<QString> * > 

в качестве коллекции.Табличное представление используется для отображения сообщений журнала из приложения, поэтому коллекция в конечном итоге станет очень большой ... После того, как она вставит несколько тысяч строк, я замечаю, что табличное представление начинает сильно замедляться, и в конечном итоге представление останавливается на несколько секундперед обновлением .. Это тип коллекции, которую я использую, которая заставляет его сильно замедляться?Есть ли лучший способ хранить данные, которые вставляются?Поддерживает ли QTableView большой объем данных?

Редактировать

Отправленный код в столбце Qt: http://www.qtforum.org/article/37326/qttableview-slows-down-when-a-lot-of-data-is-inserted.html

1 Ответ

0 голосов
/ 20 января 2012

Я успешно использовал QTableView, отображая ~ 10000 строк, поэтому QTableView может поддерживать его, но ваша коллекция оставляет желать лучшего.

QList очень дорого для вставки в середине, так как вам нужно перераспределить все, что находится под индексом, который вы пытаетесь вставить, при условии, что вы только перемещаете указатели, но все еще.

Обычно для хранения данных я бы использовал std::vector< data_struct * > вместо использования векторов строк. QVariant вполне может представлять целые числа и другие типы, поэтому вам не нужно выполнять преобразование заранее.

Лучшее предложение, которое я могу придумать, это запустить gprof или аналогичный инструмент для времени, где именно вы проводите время, а затем обратиться к этой конкретной части.

...