Название: Передача QWidget* в другой поток[РЕШЕНО] Отправлено: d13mon от Апрель 03, 2012, 11:06 Вот такая проблема возникла. Передаю QWidget* в класс, который находится в другом потоке. Другой поток отвечает за вывод видео. И мне нужно передать туда виджет, чтобы прицепить вывод к нему (выводить видео на него). Получаю assert "Cannot send events to objects owned by a different thread".
Если так делать нельзя, то каков верный путь? Если так делать можно, то как решить данную проблему? Название: Re: Передача QWidget* в другой поток Отправлено: mutineer от Апрель 03, 2012, 11:10 GUI можно трогать только из основного потока. Возможно сигнал-слот поможет
Название: Re: Передача QWidget* в другой поток Отправлено: d13mon от Апрель 03, 2012, 12:08 GUI можно трогать только из основного потока. Возможно сигнал-слот поможет Правильно ли я вас понял: с классами производными от QWidget можно работать только в контексте основного потока и передавать их и даже указатели на них в другой поток нельзя? Название: Re: Передача QWidget* в другой поток Отправлено: mutineer от Апрель 03, 2012, 12:09 Передавать-то указатели можно, но совершать с ними действия, влияющие на GUI можно только из основного потока
Название: Re: Передача QWidget* в другой поток Отправлено: Bepec от Апрель 03, 2012, 12:18 немного неверно. При сигнал слотовом соединении можно добиться того,чтобы слот выполнялся в своём потоке.(т.е. основном)
Название: Re: Передача QWidget* в другой поток Отправлено: mutineer от Апрель 03, 2012, 12:26 Что неверного-то?
Название: Re: Передача QWidget* в другой поток Отправлено: Bepec от Апрель 03, 2012, 12:29 Т.е. если я в потоке вызову через очередь "show/hide/resize", то "show/hide/resize" выполнится в основном потоке. Али не так? убеди меня.
Название: Re: Передача QWidget* в другой поток Отправлено: mutineer от Апрель 03, 2012, 12:30 В чем убедить? В том, что с гуем действия можно выполнять только из основного потока?
Название: Re: Передача QWidget* в другой поток Отправлено: d13mon от Апрель 03, 2012, 12:39 Единственное действие, которое я выполняю над виджетом во втором потоке - это вызываю метод WId(). На нём и возникает assert. При этом если просто передавать во второй поток WId виджета вместо самого виджета, то всё нормально.
Название: Re: Передача QWidget* в другой поток Отправлено: Bepec от Апрель 03, 2012, 12:41 mutineer мы оба правы.
Выполняться действие должно в основном потоке. Но вызывать действие можно из любого потока через сигнал слоты ;) Название: Re: Передача QWidget* в другой поток Отправлено: mutineer от Апрель 03, 2012, 12:43 mutineer мы оба правы. Выполняться действие должно в основном потоке. Но вызывать действие можно из любого потока через сигнал слоты ;) Действие при этом где произойдет? В основном потоке же. И совершенно неважно как и откуда оно инициировано, главное где выполнится Название: Re: Передача QWidget* в другой поток Отправлено: mutineer от Апрель 03, 2012, 12:44 Единственное действие, которое я выполняю над виджетом во втором потоке - это вызываю метод WId(). На нём и возникает assert. При этом если просто передавать во второй поток WId виджета вместо самого виджета, то всё нормально. Вот тебе и решение Название: Re: Передача QWidget* в другой поток Отправлено: Bepec от Апрель 03, 2012, 12:45 Или как вариант используй сигнал слотовые соединения :)
Название: Re: Передача QWidget* в другой поток Отправлено: d13mon от Апрель 03, 2012, 12:55 Единственное действие, которое я выполняю над виджетом во втором потоке - это вызываю метод WId(). На нём и возникает assert. При этом если просто передавать во второй поток WId виджета вместо самого виджета, то всё нормально. Вот тебе и решение От этого я наоборот ушел в сторону виджета. Название: Re: Передача QWidget* в другой поток Отправлено: d13mon от Апрель 03, 2012, 12:57 В общем спасибо, Верес и mutineer.
Буду пробовать через сигнал-слот. Название: Re: Передача QWidget* в другой поток Отправлено: Bepec от Апрель 03, 2012, 12:57 Название темы измени на "название темы"[РЕШЕНО]
Название: Re: Передача QWidget* в другой поток Отправлено: d13mon от Апрель 03, 2012, 13:00 Название темы измени на "название темы"[РЕШЕНО] Изменю как решу проблему. А пока может чего ещё умного напишут :) |