Я не могу рисовать QVideoWidget с помощью QPainter

Я пытаюсь рисовать строки, пока у меня есть видео, например, субтитры... У меня есть Phonon::QVideoWidget, в его конструкторе я делаю:

painter = new QPainter(this);

и я переопределил событие рисования на это, только для теста:

void MyVideoWidget::paintEvent(QPaintEvent* event)
{
    painter->drawLine(0, 0, 1, 1);
    //painter-> anything shows
}

Итак, когда я запускаю свой проигрыватель, я не вижу ничего, что сделал QPainter, только обычное видео, воспроизводящее какие-либо идеи?


person fredcrs    schedule 05.06.2012    source источник
comment
установите видимый цвет пера по отношению к фону для художника и попробуйте...   -  person ScarCode    schedule 05.06.2012


Ответы (1)


Чаще всего QPainter делают локальным экземпляром в функции paintEvent().

QPainter painter(this);

Это приводит к автоматическому вызову методов begin() и end(). Это необходимо для правильной работы QPainter. Вы можете попробовать вызвать их вручную в paintEvent(), чтобы увидеть, имеет ли это значение.

Еще одна вещь, которую вы можете попробовать для наложения текста на видео, — это создать QLabel в коде и сделать ваш виджет видео его родителем. Это не требует подкласса виджета видео или переопределения события рисования.

person Arnold Spence    schedule 05.06.2012
comment
... и ваше предложение о QLabel позволяет вам переопределить его paintEvent, чтобы вы могли создавать свои собственные рисунки независимо от виджета видео. - person felixgaal; 05.06.2012
comment
Я пытался использовать локальный экземпляр QPainter, но тоже не работал. Я начинаю думать, что VideoWidget не использует PaintEvent для рендеринга видео ... Вместо этого я попытаюсь использовать QLabel и опубликую здесь снова, если это сработает, и отметим ваш ответ, спасибо - person fredcrs; 05.06.2012
comment
Это сработало, но с прозрачным фоном QLabel не перерисовывается, когда VideoWidget меняет кадры сам, теперь я почти уверен, что VideoWidget не использует paintEvent для рендеринга видео ... любая идея о том, как заставить метку субтитров перерисовывать себя когда видео воспроизводится?? Использование таймера не было бы хорошей идеей, не так ли? Благодарность - person fredcrs; 05.06.2012
comment
Вы можете попробовать еще один метод, который сработал для меня в этом ответе на аналогичный вопрос: stackoverflow.com/a/3692993/31044 - person Arnold Spence; 05.06.2012