QT поток и функция setPixmap не работают - PullRequest
0 голосов
/ 09 августа 2010

У меня есть собственное приложение в QT. У него есть один основной поток GUI, который будет обрабатывать событие из входных данных, но я создал один поток, который будет применяться для смены изображений каждые 10 секунд (как слайд-шоу или заставка).но когда я вызываю функцию setPixmap из потока, это дает мне предупреждение о том, что использование Pixmap из потока небезопасно.

в чем решение?почему я не использую setPixmap из потока?

Спасибо, Neel

Ответы [ 3 ]

2 голосов
/ 09 августа 2010

Причина в том, что эта функция не является поточно-ориентированной.

Решением является использование QTimer для запуска вашей функции каждые 10 секунд.QTimer интегрирован в цикл обработки событий Qt, поэтому вам не нужен другой поток для этого.

1 голос
/ 09 августа 2010

У меня нет реального ответа на этот вопрос, но я знаю, что setPixmap() должен вызываться только из основного потока графического интерфейса. Я нашел этот пост от нескольких лет назад, который также указывает на документацию по trolltechs. Прочтение этой вещи быстро заставляет меня думать, что это как-то связано с тем, как разные платформы рендерит вещи и т.д.

http://lists.trolltech.com/qt-interest/2008-11/thread00534-0.html

http://doc.trolltech.com/4.4/threads.html#painting-in-threads

0 голосов
/ 09 августа 2010

Вместо того, чтобы ваш рабочий поток вызывал setPixmap(), пусть он излучает сигнал (что-то вроде newImagesReady()).

Затем подключите этот сигнал к слоту update() вашего виджета.(Или создайте свой собственный слот, если вы хотите сделать больше, чем обновить виджет).

Этот метод позволяет пересекать границы потоков.

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