Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: Valter от Декабрь 25, 2012, 13:00



Название: Обращение к графическому интерфейсу из другого потока
Отправлено: Valter от Декабрь 25, 2012, 13:00
Как я понимаю, в Qt так делать нельзя, ошибка возникает:
(http://s42.radikal.ru/i095/1212/fc/54dbd28e51cft.jpg) (http://radikal.ru/F/s42.radikal.ru/i095/1212/fc/54dbd28e51cf.jpg.html)
Как принято в Qt поступать в таких случаях?


Название: Re: Обращение к графическому интерфейсу из другого потока
Отправлено: mutineer от Декабрь 25, 2012, 13:02
Переносить обращения к ГУЯм в основной поток


Название: Re: Обращение к графическому интерфейсу из другого потока
Отправлено: Bepec от Декабрь 25, 2012, 13:23
Правильно мыслишь, Valter.
Так в Qt делать нельзя. А можно сделать проще - создать слот в гуи классе, который будет производить нужные действия. И вызывать его.


Название: Re: Обращение к графическому интерфейсу из другого потока
Отправлено: Dancing_on_water от Декабрь 26, 2012, 08:53
Не совсем так. Да, все элементы гуя должны жить в основном потоке (это ограничение Х-сервера, под которое приходится подстраиваться). Но, если элемент еще не отрисован, то вполне допустимо, чтоб его элементы менялись напрямую из другого потока.
Если уже отрисован, то как посоветовали: делаешь слот и соединяешь через queue.


Название: Re: Обращение к графическому интерфейсу из другого потока
Отправлено: Bepec от Декабрь 26, 2012, 08:59
Dancing_on_water - ГУИ такая штука, что промежуток между "отрисовкой" и "не отрисовкой" обычно ничтожно малый. :) Потому лучше использовать слоты.