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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Нарисовать поверх видео  (Прочитано 3868 раз)
SL
Гость
« : Май 16, 2010, 19:27 »

Здравствуйте такой вопрос, нужно нарисовать по верх видео текст и небольшую графику (линии) пробовал сделать так:

Код:
class MainWigdet : public QWidget
{
....................................
   QWidget* playerWidget_; // виджет для mplayer
    DrawWidget* renderWidget_;
    QProcess *mplayerProcess_;
}
MainWigdet::MainWigdet(QWidget *parent):QWidget(parent)

{
    playerWidget_ = new QWidget(this);
    playerWidget_->setAttribute(Qt::WA_PaintOnScreen);
 

    renderWidget_ = new DrawWidget(this);
    mplayerProcess_ = new QProcess(this);

    QStringList args;

    args << "-wid" << QString::number(playerWidget_->winId());
    args << movieFile;
    mplayerProcess_->setProcessChannelMode(QProcess::MergedChannels);
    mplayerProcess_->start(mplayerPath, args);

    playerWidget_->resize(800, 500);
    renderWidget_->resize(500, 100);
    renderWidget_->move(200, 200);
 

Пока просто решил сделать в лоб создаю два виджета, предполагаю что    renderWidget, рисуется вторым, собственно так и происходит, но ни как не могу добиться что бы был прозрачный фон и почему то в renderWidget не вызывается событие painEvent 

Код:
class DrawWidget : public QWidget
{
public:
    DrawWidget(QWidget *parent =0);
protected:
     void  painEvent(QPaintEvent *event);
};

void  DrawWidget::painEvent(QPaintEvent *event)
{
     QPainter painter(this);
     QPen Pen(QColor(255,0,0, 255));
     painter.setPen(Pen);
     painter.drawText(50,50,"Test");
.......................................................

если же использовать фильтр то все рисуеться :
Код:
bool DrawWidget::eventFilter(QObject *obj, QEvent *event)
{
    if( (event->type() == QEvent::Paint) && (obj == this) )
    {
        removeEventFilter(this);
        QApplication::sendEvent(obj, event);
        installEventFilter(this);

        QPainter painter(qobject_cast<QWidget*>(obj));
...............................................................................

Попробовал обойтись одним виджетом, то есть рисовать в том в который рисует mplayer
Код:
bool PlayerWidget::eventFilter(QObject *obj, QEvent *event)
{
    if( (event->type() == QEvent::Paint) && (obj == this) )
    {

        setAutoFillBackground(false);
        removeEventFilter(this);
        QApplication::sendEvent(obj, event);
        installEventFilter(this);
        setAutoFillBackground(true);
        QPainter painter(qobject_cast<QWidget*>(obj));
................................................................................

Тогда просто все моргает и не показывается видео.
Платформа Linux
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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