Bilderstream mit Qt @ anzeig

Die aktuelle Lösung sieht folgendermaßen aus:

//paintlabel.h
class PaintLabel : public QWidget
{
    Q_OBJECT

public:
    explicit PaintLabel(QWidget *parent = 0);

public slots:
    void setImage(char *img_ptr, QSize img_size, int pitch);

protected:
    void paintEvent(QPaintEvent *event) override;

private:
    QImage image;

}

//paintlabel.cpp

PaintLabel::PaintLabel(QWidget *parent) : QWidget(parent)
{
    setAttribute(Qt::WA_NoSystemBackground, true);
}

void PaintLabel::setImageLive(char *img_ptr, QSize img_size, int pitch)
{
    image = QImage((uchar *)img_ptr, img_size.width(), img_size.height(), pitch, QImage::Format_RGB32).scaled(this->size());
    update();  
}

void PaintLabel::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);
    QPainter painter;
    painter.begin(this);
    if (!image.isNull()) {
        const QPoint p = QPoint(0,0);
        painter.drawImage(p, image);
    }
    painter.end();
}

Ich erwarte 20-40 Bilder pro Sekunde. Das Problem ist, dass die Leistung mit der Größe sehr schlecht skaliert. Bei der Größe um fullHD dauert das Malen 1-2 ms. Aber wenn ich die Größe auf 4k verändere, wird es furchtbar träge (16 ms Malen). Gibt es eine Möglichkeit, die gleiche Funktionalität bei geringerem Ressourcenverbrauch zu implementieren?

Wenn ich die übergeordnete Klasse in QOpenGLWidget ändere, wird der QPainter theoretisch mit Hardwarebeschleunigung ausgeführt. Dabei läuft es aber noch langsamer.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage