Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Sasha от Октябрь 31, 2013, 17:07



Название: Рисование QGraphicsScene в отдельном потоке
Отправлено: Sasha от Октябрь 31, 2013, 17:07
Здравствуйте,
Можно ли рисовать сцену не в главном потоке? Или можно её переместить в другой поток? Вобщем чтоб графикой занимался не главный поток.


Название: Re: Рисование QGraphicsScene в отдельном потоке
Отправлено: Igors от Октябрь 31, 2013, 18:44
нет


Название: Re: Рисование QGraphicsScene в отдельном потоке
Отправлено: Old от Октябрь 31, 2013, 18:49
Здравствуйте,
Можно ли рисовать сцену не в главном потоке? Или можно её переместить в другой поток? Вобщем чтоб графикой занимался не главный поток.
Можно что бы первый поток занимался графикой, а другие занимались вычислениями. Нет такого понятия - главная нить, она ни главнее других нитей. :)


Название: Re: Рисование QGraphicsScene в отдельном потоке
Отправлено: Fregloin от Ноябрь 01, 2013, 10:48
можно рисовать в pixmapы или image в отдельном потоке, а отображать в главном, но это конечно повысит расход памяти, зато увеличит быстродейсивие


Название: Re: Рисование QGraphicsScene в отдельном потоке
Отправлено: Igors от Ноябрь 01, 2013, 11:21
Нет такого понятия - главная нить, она ни главнее других нитей. :)
Хммм... не уверен. Напр выход из главной означает завершение приложения, а выход из других - нет


Название: Re: Рисование QGraphicsScene в отдельном потоке
Отправлено: Old от Ноябрь 01, 2013, 11:57
Напр выход из главной означает завершение приложения, а выход из других - нет
Если вы будете выходить из любой нити по exit, они все будут главными. :)


Название: Re: Рисование QGraphicsScene в отдельном потоке
Отправлено: Sasha от Ноябрь 01, 2013, 12:21
Здравствуйте,
Можно ли рисовать сцену не в главном потоке? Или можно её переместить в другой поток? Вобщем чтоб графикой занимался не главный поток.
Можно что бы первый поток занимался графикой, а другие занимались вычислениями. Нет такого понятия - главная нить, она ни главнее других нитей. :)
Под главным, я понимаю поток в котором работает пользовательский интерфейс. Т.е. рисование и приём сообщений от пользователя осуществляется в одном потоке и чем тяжеловеснее рисование тем, как мне показалось, реже приходят сообщения от мыши или от сенсорного экрана. Поэтому я и подумал, что может быть можно перенести отрисовку в отдельный поток (пусть даже рисуя в фоновый буфер, а в главном окне только его отображать), чтобы она не мешала приёму сообщений.


Название: Re: Рисование QGraphicsScene в отдельном потоке
Отправлено: Sasha от Ноябрь 01, 2013, 12:41
можно рисовать в pixmapы или image в отдельном потоке, а отображать в главном, но это конечно повысит расход памяти, зато увеличит быстродейсивие
Попытался это сделать, но:
1) почему-то перестали отображаться картинки. С этим пока не разбирался.
2) программа начала падать. Напомню, что я пытаюсь перенести в отдельный поток отрисовку графической сцены, которую рисую ф-ей render. Если просто рисую в буфере, скажем эллипс, то всё хорошо, а вот с ф-ей render туго. Точнее, она срабатывает, но падения начинаются тогда, когда со сценой что-то происходит. Похоже, что просто накладываются обращения к графическим элементам (один поток обращается к ним для рисования, а второй для выполнения над ними некоторых действий). Т.е. нужно всё синхронизировать, но как это сделать, до конца не понятно. Можно попробовать вставить блокировку при приёме сообщений сцены и при отрисовке, но не факт что этого будет достаточно, да и это слишком крупно и, возможно сведёт на нет всё преимущество выноса отрисовки в отдельный поток (т.е. пока будет идти рисование всё-равно сообщения приниматься не будут).