ich habe folgendes Problem. Ich muss alle 20 ms ein neues Bild anzeigen. Dabei wollte ich den GraphicsView -> GraphicsSence -> GraphicsItem verwenden, nur leider bekomme ich dabei eine CPU auslastung von 60 Prozent.
Ich bin dabei so vorgegangen das ich eine Klasse von GraphicsObject abgeleitet habe und diese für mein Problem angepasst habe. Darin enthalten ist ein QImage Objekt welches die Bild Daten enthält.
Jetzt habe ich dieses Objekt einer QGraphisScene zugewiesen welches ich nun in einem Objekt vom Typ QGraphicsView darstellen lasse. Den View habe ich allerdings wieder abgeleitet und habe als ViewPort QGLWidget gesetzt.
Dann habe ich einen Timer gesetzt der alle 20 ms das Bild updaten soll.
Das funktioniert soweit eigentlich auch sehr gut nur ist es sehr CPU lastig. Ich habe eine Auslastung von 60 % wenn ich dies so umsetzte. Wird hingegen das immer gleiche Bild angezeigt alle 20 ms habe ich eine Auslastung von 4% was hervorragend wäre.
Gibt es vielleicht eine Option\Flag\Einstellung die das Zeichnen Optimiert?
Hier mal die Zeichenfunktion aus dem GraphicsObject:
Code: Alles auswählen
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
painter->setCompositionMode(QPainter::CompositionMode_Source);
painter->setClipRect(option->exposedRect);
painter->drawImage(0,0, m_image);
}
Code: Alles auswählen
void CViewer::timerEvent(QTimerEvent *event)
{
QMutexLocker Lock(&m_mutex);
memcpy(m_image->bits(), m_bits, m_image->width() * m_image->height());
m_scene->update();
this->fitInView(m_scene->sceneRect());
}
Wäre super wenn mir jemand weiterhelfen könnte.
Gruß
Treehouse