QWidget.paintevent() 对比 QLabel.setPixmap()

QWidget.paintevent() vs QLabel.setPixmap()

我正在尝试抓取一个小部件并将其显示在另一个小部件中。 哪个比较便宜?

1- 使用 QWidget.paintevent()

void MonitoringWidget::paintEvent(QPaintEvent *event)
{
    if (m_mirrorWidget){
        QPixmap mirrorPix = m_mirrorWidget->grab();
        QPainter p(this);
//        p.drawPixmap(this->rect(),mirrorPix,mirrorPix.rect());
        p.drawPixmap(ui->mirrorFrame->geometry(),mirrorPix,mirrorPix.rect());
        update();
    }
   return;
}

2- QLabel.setPixmap()?

QLabel mirrorLabel;
QPixmap mirrorPix = m_mirrorWidget->grab();
mirrorLabel.setPixmap(mirrorPix )

谢谢

我会覆盖 MonitoringWidget::paintEvent(),然后使用受监控的小部件的 QWidget::render() 来呈现受监控的将小部件放入 MonitoringWidget。

这应该大致相当于被监视的小部件本身在接收到绘制事件时将执行的操作。

此外,您可能需要在受监视的小部件和监视器之间进行一些 link 以响应受监视的小部件的更新。我可以想象 MonitoringWidget 将事件过滤器安装到被监视的小部件中,然后在那里响应绘制事件。