Russian Qt Forum
Октябрь 04, 2024, 02:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: компонент timeline  (Прочитано 11087 раз)
gavlig
Гость
« : Август 18, 2011, 23:18 »

Всем привет! Очень нужна помощь в виде советов и пожеланий Улыбающийся
Надо написать компонент для просмотра видеоархивов. Должен он в реальном времени отслеживать положение видео на "временной линии", то есть рисовать надо будет много и часто. Первая моя попытка была с использованием пополам QPainter'a и чистого OpenGL api, но в результате криворукости компонент не хило жрёт проц во время проигрывания. Сейчас решил ещё раз подумать над реализацией в целом. Попробовал QGraphicsView со всеми вытекающими и QGLWidget в качестве viewport'a, написал маленькую демку, рисующую линейку в пределах и за пределами вьюпорта, чтобы её можно было потягать.
.cpp
http://paste.org.ru/?51huds
.h
http://paste.org.ru/?0lyk0v

Так вот эта простенькая штука жрёт до десяти процентов от интеловского 2.4 code2 duo при наличии nvidia 9600 с блобом. Теперь вопрос, есть ли возможность заставить QGraphicsView не есть лишних ресурсов на скролле или таки надо заняться велосипедостроением и пилить всё самому(под пилением подразумевается оптимизация старого уже набыдлокоденного)?

картинки прилагаются

вот первый вариант компонента
http://piccy.info/view3/1874267/e4e5fbdebaa28663a15b39b70c7827ec/orig/
вот демка, сырцы которой в первом посте
http://piccy.info/view3/1874285/4eed11eface4e0ec7f197b33a6296d32/orig/

Отсылкам на любые примеры или доки буду неописуемо рад Улыбающийся
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Август 19, 2011, 11:05 »

Никаких ужасных трмозов не ощутил. Процессор до 3 процентов при протяжке. У меня комп по слабее существенно.

Вообще то, желательно шкалу отрисовать в фоне. В уачестве ползунка можно использовать QGraphicsLineItem, вернее класс на его основе, в котором переопределить shape ()  и boundingRect ()
Записан
gavlig
Гость
« Ответ #2 : Август 19, 2011, 11:20 »

не понял про отрисовки шкалы в фоне.. А где я отрисовываю? Ползунок мне не нужен, таймлайн должен тягаться при зажатой кнокпе мыши. Может вместо скроллинга как-то по-другому передвигать вьюпорт?
Записан
_OLEGator_
Гость
« Ответ #3 : Август 21, 2011, 11:00 »

Однозначно рисовать самому, то что вы делаете (формируете изображение из отдельных QGraphicsLineItem) - это мягко говоря извращение.

Нужно унаследоваться от QWidget и переопределить paintEvent.
Сам рисовал все эти шкалы, никаких торомозов не должно быть даже без использования OpenGL.
Записан
gavlig
Гость
« Ответ #4 : Август 22, 2011, 12:18 »

Именно по такому пути я и пошёл изначально. Улыбающийся Только вместо QWidget -> QGLWidget.
Записан
spirits25
Гость
« Ответ #5 : Октябрь 18, 2012, 15:17 »

У кого-нибудь есть рабочий пример timeline. необходима бесконечно прокручивающаяся полоса для прокрутки даты. Можете подсказать по этому поводу?
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #6 : Октябрь 19, 2012, 16:32 »

Однозначно рисовать самому, то что вы делаете (формируете изображение из отдельных QGraphicsLineItem) - это мягко говоря извращение.
+1

Нужно унаследоваться от QWidget и переопределить paintEvent.
Сам рисовал все эти шкалы, никаких торомозов не должно быть даже без использования OpenGL.
Тормозов при отрисовке линий и не будут.
Тормоза восновном идут при отрисовке строк.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #7 : Октябрь 19, 2012, 16:35 »

У кого-нибудь есть рабочий пример timeline. необходима бесконечно прокручивающаяся полоса для прокрутки даты. Можете подсказать по этому поводу?
Это достаточно просто. В чем проблема?
Ползунок настрить? Улыбающийся
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
_OLEGator_
Гость
« Ответ #8 : Октябрь 19, 2012, 16:39 »

Тему годовой давности решили поднять?
to panAlexey:
Тормозов вообще не будет, если правильно отрисовывать только видимую информацию, а ее тут кот наплакал.
Записан
spirits25
Гость
« Ответ #9 : Октябрь 19, 2012, 16:48 »

У кого-нибудь есть рабочий пример timeline. необходима бесконечно прокручивающаяся полоса для прокрутки даты. Можете подсказать по этому поводу?
Это достаточно просто. В чем проблема?
Ползунок настрить? Улыбающийся
Я не знаю как сделать бесконечную прокрутку с изменением даты в шапке. В этом проблема. Можете пример?
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #10 : Октябрь 21, 2012, 21:26 »

Тему годовой давности решили поднять?
to panAlexey:
Тормозов вообще не будет, если правильно отрисовывать только видимую информацию, а ее тут кот наплакал.
если про "тут" то согласен.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #11 : Октябрь 21, 2012, 21:41 »

У кого-нибудь есть рабочий пример timeline. необходима бесконечно прокручивающаяся полоса для прокрутки даты. Можете подсказать по этому поводу?
Это достаточно просто. В чем проблема?
Ползунок настрить? Улыбающийся
Я не знаю как сделать бесконечную прокрутку с изменением даты в шапке. В этом проблема. Можете пример?

если на словах, то у тебя есть грубо отрезок  А--------Б--------С----------->Д
первоначальная длина АД, область видимости на экране БС. БС может меняться в зависимости от ширины окна.  ты двигаешь БС, если оно наезжает на Д просто приращиваешь Д, если на А - уменьшаешь А. получается бесконечная прокрутка. Рисуешь все опираясь на разницу Б-А - получается точка отсчета для паинтера.
"с изменением даты в шапке." - тут уже кто как предпочитает, можно привязать дату к Б (привычный порядок). но удобнее к середине отрезка БС.

это типа я описал какие переменные нужны. или требовалось что-то еще?
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
spirits25
Гость
« Ответ #12 : Октябрь 22, 2012, 10:52 »

Если всё так просто, почему никто не может минимальный пример дать? или никто такого не писал? я с рисованием не дружу.
Записан
Bepec
Гость
« Ответ #13 : Октябрь 22, 2012, 12:18 »

Потому что это простейшая арифметика. Если Курсор >= ВидимыйКонец тогда двигай. И обратно. PanAlexey чётко и понятно описал.

Или вас озадачивает именно процесс рисования? Если он - то я могу вам накидать проектик (кривой по рисункам, ибо не художник, но без логики) Улыбающийся

PS QэээSlider вам чем не подходит? идеальный же кандидат Улыбающийся
Записан
spirits25
Гость
« Ответ #14 : Октябрь 22, 2012, 12:26 »

Да, меня озадачивает сам процесс рисования=) я понял смысл, ЧТО нужно делать, но мне бы минимальный простой пример КАК=)
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.097 секунд. Запросов: 23.