【问题标题】:Can't override VideoWidget paintEvent() in QT C++无法在 QT C++ 中覆盖 VideoWidget paintEvent()
【发布时间】:2010-12-07 00:00:00
【问题描述】:

我正在尝试在 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”消息。

谁能帮帮我?我做错了什么?

非常感谢!

【问题讨论】:

  • 您在调整大小或更改小部件状态(最小化/最大化)时看到了什么?尝试调用 myVideoWidget 类的 update() 方法。这有什么作用吗?
  • 我试过你说的但是我什么都看不到,也看不到我发送给qDebug()的消息,这意味着该方法没有被执行。谢谢你!

标签: c++ qt4 overriding repaint qpainter


【解决方案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。尝试使用重绘而不是更新。

【讨论】:

  • 我认为这是个好主意,但它不起作用。如果我只能看到椭圆而不是视频,那将很有用。问题是我没有很好地覆盖该方法。我做错了一些事情,导致paintEvent没有被执行,但不知道是什么。也许参数不正确,所以签名与 VideoWidget 的签名不匹配,但我已经检查过了。谢谢你!
  • 正如我所说,VideoWidget 可能不会使用paintEvent 来渲染任何东西。您可以在 VideoWidget 上添加半透明小部件并在该小部件上进行绘制
猜你喜欢
  • 1970-01-01
  • 2019-06-07
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
相关资源
最近更新 更多