Здравствуйте такой вопрос, нужно нарисовать по верх видео текст и небольшую графику (линии) пробовал сделать так:
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