Потоковые QImages в Qt 4.7 - PullRequest
       1

Потоковые QImages в Qt 4.7

2 голосов
/ 26 ноября 2010

Я создаю приложение с графическим интерфейсом в Qt с функциональностью, аналогичной Google Maps (т. Е. Вы можете перемещать / масштабировать, и отображается больше карты).В настоящий момент я динамически загружаю 256-пиксельные блоки изображений по мере необходимости (с жесткого диска).

Как вы можете себе представить, это замедляет мою программу всякий раз, когда я выполняю панорамирование и масштабирование.Я хочу использовать отдельный поток (MapLoader) для загрузки изображений по мере необходимости.

Мой класс данных имеет тройной указатель на изображения (т.е. QImage * [x] [y]).Изображения вне области просмотра являются нулевыми, в то время как те, которые находятся внутри области просмотра, являются указателями QImage.

Моя проблема в том, что я хочу, чтобы мой художник мог иметь доступ к массиву изображений и рисовать их (независимо от того, загружены они или нет).При одновременной загрузке изображений в массив без блокировки доступа к массиву.

Как можно решить эту проблему?Должен ли массив изображений быть изменчивым?

Ответы [ 2 ]

0 голосов
/ 02 декабря 2010

Вы должны иметь возможность порождать загрузку изображений в рабочие потоки, и эти потоки должны как-то сигнализировать вам, когда изображение будет готово, вместе с расположением изображения.(Использование QtConcurrent было бы моим первым уклоном для этого.) Если вы используете соединения сигнал / слот, по умолчанию Qt будет следить за тем, чтобы слот работал в правильном потоке.Поэтому поместите ваш класс изображений в поток пользовательского интерфейса, пусть рабочие потоки испускают сигналы с изображениями при их чтении, а слот в классе изображений (все еще в контексте потока пользовательского интерфейса) правильно хранит изображения.Поскольку назначение на карту и чтение с карты находятся в одном и том же контексте потока, вам не нужно делать это с какими-либо изменчивыми отметками или блокировками.

0 голосов
/ 26 ноября 2010

На QtLabs (с видео) есть хорошее демо тестового приложения, которое будет соответствовать вашей ситуации.Это браузер изображений, который загружает изображения в сетку.Хотя автор заявляет, что это не оптимальное решение, я думаю, что оно должно содержать некоторую полезную информацию для использования потоков для загрузки контента.Вы можете видеть это здесь .Я думаю, что в разделе комментариев также могут быть интересные ссылки.

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