无法覆盖QT C ++中的VideoWidget paintEvent()

时间:2010-12-07 00:00:01

标签: c++ qt4 override repaint qpainter

我正试图在Phonon库的VideoWidget上绘制一些形状,但是我无法覆盖paintEvent()方法。

如果我尝试实现这样的方法:

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

我收到此错误:没有在'Phonon :: VideoWidget'类中声明的'void Phonon :: VideoWidget :: paintEvent(QPaintEvent *)'成员函数

所以我决定使用受保护的方法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);
}

程序运行但不会绘制任何内容或显示“repintando”消息。

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

非常感谢!

1 个答案:

答案 0 :(得分: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);
}

BUT!我不确定VideoWidget是否使用paintEvent来呈现视频帧。有可能你必须手动调用paintEvent。尝试使用重绘而不是更新。