Название: Работа с большой таблицей Отправлено: bixbit от Апрель 01, 2012, 16:07 Имеется таблица (в среднем около милиона ячеек)
при работе в ее пределах программа виснет всё что возможно вызывается через QtConcurrent::run(...); Как ы что нужно оптимизировать чтоб программа не висла? Название: Re: Работа с большой таблицей Отправлено: V1KT0P от Апрель 01, 2012, 16:10 Имеется таблица (в среднем около милиона ячеек) Вынести всю работу с таблицей в класс, очередь сигналов класса вынести в отдельный поток. Посылать задания классу сигналами и получать результат тоже сигналами.при работе в ее пределах программа виснет всё что возможно вызывается через QtConcurrent::run(...); Как ы что нужно оптимизировать чтоб программа не висла? Название: Re: Работа с большой таблицей Отправлено: bixbit от Апрель 01, 2012, 16:24 Вынести всю работу с таблицей в класс, очередь сигналов класса вынести в отдельный поток. Посылать задания классу сигналами и получать результат тоже сигналами. Таблица с самого начаба была в отдельном классе.Из сигналов только контекстное меню которое в отдельном потоке (QtConcurrent) вызывает функцию для инициализации таблицы. При этом GUI виснет при изменении размера окна, вызове контекстного меню и других манипуляциях с окном Название: Re: Работа с большой таблицей Отправлено: V1KT0P от Апрель 01, 2012, 16:28 Вынести всю работу с таблицей в класс, очередь сигналов класса вынести в отдельный поток. Посылать задания классу сигналами и получать результат тоже сигналами. Таблица с самого начаба была в отдельном классе.Из сигналов только контекстное меню которое в отдельном потоке (QtConcurrent) вызывает функцию для инициализации таблицы. При этом GUI виснет при изменении размера окна, вызове контекстного меню и других манипуляциях с окном Название: Re: Работа с большой таблицей Отправлено: Авварон от Апрель 01, 2012, 16:58 Чем таблицу отображаешь?
Название: Re: Работа с большой таблицей Отправлено: bixbit от Апрель 01, 2012, 17:07 Ну дык ты же не вынес обработчик сигналов в отдельный поток верно? Вынеси и не будет проблем. можно подробнее? а то не сталкивался с такимЧем таблицу отображаешь? обычный QTableWidgetНазвание: Re: Работа с большой таблицей Отправлено: V1KT0P от Апрель 01, 2012, 17:15 можно подробнее? а то не сталкивался с таким Код После этого работай с классом только через сигналы и вся работа класса больше не будет влиять на графический интерфейс. Название: Re: Работа с большой таблицей Отправлено: lit-uriy от Апрель 01, 2012, 18:19 >>обычный QTableWidget
он для этих объёмов данных не предназначен. Изучай модель/представление Название: Re: Работа с большой таблицей Отправлено: Авварон от Апрель 01, 2012, 20:12 lit-uriy
Да тейбл вью тоже сдохнет... Название: Re: Работа с большой таблицей Отправлено: Syveren от Апрель 02, 2012, 09:44 Можно написать свою модель (хранит только значения первичных ключей), которая в методе data делает запрос в БД и вовращает только нужные значения.
Разумеется лучше заранее определять первую и последнюю видимую строку и кешировать видимые данные (так будет быстрее). Я так делал для большого списка... с таблицей будет по труднее. Название: Re: Работа с большой таблицей Отправлено: interv от Апрель 09, 2012, 13:01 при работе в ее пределах программа виснет Ты изменяешь только ячейку, или все данные меняешь?если, допустим, раз в 5 сек ты меняешь все данные то у таблички вроде есть слот который отрабатывает при изменении модели, у меня такая задача решалась дисконнектом этого слота и модели - изменение данных - коннект сигнала и слота. Если интересует могу поискать. Название: Re: Работа с большой таблицей Отправлено: Bepec от Апрель 09, 2012, 13:28 to Авварон: При таблице в 10,000,000 строк и 25 колонок, заполненными рандомными данными программа даже не чешется. Точнее чешется по желанию пользователя, но не лагает.
(Мой первый смешной опыт с модель/вью и делегатами) По теме: TableWidget на такое не рассчитан. Используй Model-View, как советовал lit-uriy. Если использовать Model-View, то миллион не будет для тебя пределом. :D |