2010-12-07 100 views
1

我试图从Phonon库中的VideoWidget上绘制一些形状,但我无法重写paintEvent()方法。不能覆盖QT中的VideoWidget paintEvent()C++

如果我尝试实现这样的方法:“无效的声子:: VideoWidget ::的paintEvent(QPaintEvent *)”任何一个成员函数在类中声明“声子:::

void Phonon::VideoWidget::paintEvent(QPaintEvent *event){ 
    QPainter painter(this); 
    painter.setPen(QPen(Qt::red,3)); 
    qDebug()<< "repintando"; 
    painter.drawEllipse(500,500,100,100); 
} 

我得到这个错误VideoWidget”

所以我决定创建一个受保护的方法的paintEvent一个myVideoWidget头和mainwindow.cpp实现这样的:

void myVideoWidget::paintEvent(QPaintEvent *event){ 
    QPainter painter(this); 
    painter.setPen(QPen(Qt::red,3)); 
    qDebug()<< "repintando"; 
    painter.drawEllipse(500,500,100,100); 
} 

和PR图运行,但它不绘制任何东西或显示“repintando”消息。

任何人都可以帮助我吗?我究竟做错了什么?

非常感谢!

+0

当您调整大小或更改小部件状态(最小化/最大化)时,您是否看到一些内容?尝试调用myVideoWidget类的update()方法。这是否做了什么? – 2010-12-07 00:04:11

+0

我试着说你说的但我看不到任何东西,也看不到我发送给qDebug()的消息,这意味着该方法没有被执行。 谢谢你一样! – nico 2010-12-07 15:11:20

回答

1

据我所知,您已经发布了自己的课程,它继承了Phonon :: VideoWidget,并将其设置为您的播放器的视频小部件?如果是,比你需要修改你的paintEvent这样的事情:

void myVideoWidget::paintEvent(QPaintEvent *event){ 
    Phonon::VideoWidget::paintEvent(event); // perform paint event from inherited class 
    QPainter painter(this); 
    painter.setPen(QPen(Qt::red,3)); 
    qDebug()<< "repintando"; 
    painter.drawEllipse(500,500,100,100); 
} 

但是!我不确定VideoWidget是否使用paintEvent来渲染视频帧。有可能你必须调用paintEvent手册。也许尝试使用重绘而不是更新。