![]() |
|
|
![]()
|
|
| vlarry |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 16.8.2009 Репутация: нет Всего: нет |
Добрый день, форумчане! Хотел бы попросить у Вас совета, как правильно решить следующую задачу: есть qmainwindow на котором расположена сцена QGraphicsScene. На сцену выводится видео через phonon и бегущая строка(QLabel). И конечно все это тормозит . Подскажите пожалуйста, как реализовать, чтобы бегущая строка работала в другом потоке и не было тормозов...заранее спасибо.
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
рисовать, да и вообще хоть как-то использовать GUI из другого потока нельзя.
в другом потоке можно подготавливать данные для отрисовки, например для видеопроигрывателя - проводить чтение из файла и декодировать, а затем отправлять в сигнале сформированную картинку основному потоку. посмотри, что именно тормозит и попробуй это ускорить. отключи бегущую строку. если ничего не изменится, то это не она. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| vlarry |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 16.8.2009 Репутация: нет Всего: нет |
запускал видео без бегущей строки, то тормозов нет, а когда подключаю назад, то начинает тормозить...выставил задержку 5мс для бегущей строки, а двигается с задержкой где-то 500мс...что можете посоветовать в таком случае?
|
|||
|
||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 2 Всего: 50 |
На WinAPI это делается асинхронной посылкой сообщения главному потоку (::PostMessage), который и делает нужную работу (рисует).
Это сообщение отредактировал(а) Alca - 1.4.2011, 18:06 |
|||
|
||||
| vlarry |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 16.8.2009 Репутация: нет Всего: нет |
Спасибо. К сожалению мне нужно на qt... Какие еще варианты есть?
|
|||
|
||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 2 Всего: 50 |
|
|||
|
||||
| vlarry |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 16.8.2009 Репутация: нет Всего: нет |
мне кажется все равно будет тормозить...тормоза происходят при отрисовке или я ошибаюсь? расчетов там очень мало
|
|||
|
||||
| borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
это одно и то же
ну... как минимум для советов нужно знать как у тебя всё сделано. нет ? если ты не пытаешься получить 100 fps используя QPainter, то драйвера видеокарты должны справиться без проблем. в общем, без знания структуры твоей программы, что она и как делает, подсказать что-либо конкретное IMHO проблемотично. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
| vlarry |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 16.8.2009 Репутация: нет Всего: нет |
Потоки я пока не создавал, потому и спрашиваю совета...не могу понять как и где делать...
вот код mainwindow, где и реализуется наложение текста бегущей строки на видео...класс бегущей строки могу тоже выложить, если надо...
без включения видео при задержке в 30 мс строка перемещается плавно...а все вместе не хочет |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
я так и думал. даже в два раза ошибся. Есть подозрение, что тормозит отрисовка бегущей строки именно на QGraphicsScene, в котором ещё и видеоплеер крутится... Попробуй для начала разместить строку не в сцене, а просто на MainWidget'е в вертикальном layout'е с сценой... Затем можно попробовать в качестве объекта, на котором должен рисовать плеер выбрать просто QWidget, а ещё лучше QGLWidget. Также можно попробовать бегущую строку наследовать от QGLWidget. В общем, IMHO, какая-то оч. сложная у тебя компоновка... А потоки в данном случае скорее всего ( 99% ) не только не помогут, но ещё и замедлят работу. У тебя нет рассчётов, которые требуется выносить в отдельный поток. P.S. Прикольно... получается, что текст на экране у тебя железно русский, а имя файла avi - в завасимости от языка -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| vlarry |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 16.8.2009 Репутация: нет Всего: нет |
||||
|
||||
| vlarry |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 16.8.2009 Репутация: нет Всего: нет |
дабы не создавать много новых тем, решил продолжить здесь. От потоков отказался, тем более что мне сказали, что ничего не выйдет. Пробую сей час так...Создал QStackedLayout и добавил виджеты: видеоплеер и бегущую строку. Поставил режим для лайоута
но происходит что-то странное: экран становится черным, но видео не идет(только звук), а бегущая строка идет сплошной полосой, т.е. оставляет за собой след. Что это может быть и как от этого избавиться? |
|||
|
||||
| _GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
vlarry, я бы сделал следующим образом
Это сообщение отредактировал(а) _GRIN_ - 4.4.2011, 11:58 -------------------- Дорогу осилит идущий |
|||
|
||||
| vlarry |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 16.8.2009 Репутация: нет Всего: нет |
GRIN, спасибо, но в данном случае видео не идет, только звук, и бегущая строка не на видео, а под ним...а мне надо именно на видео наложить....может использовать какие-то сторонние библиотеки, если да, то какие?
|
|||
|
||||
| _GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
vlarry, опять же - перегрузи resizeEvent()
Есть одно но, строка должна добавляться в MainWindow->layout() последней, точнее она должна быть последней в списке его чайлдов, тогда она будет отрисовываться поверх плеера. З.Ы. Я к сожалению не знаю точной реализации график-сцены, но судя по описанной тобой ситуации, перерисовка чайлда сцены (бегущей строки) задейтвует какие-то механизмы самой сцены - доп.расчёты видимо. Вывод - надо убрать строку из сцены (если не поможет, то тогда я бы под профайлером запустил - что бы узнать что именно больше всего времени в гуи-потоке занимает) -------------------- Дорогу осилит идущий |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |