Zeichnen beschleunigen, aber wie?
Verfasst: 31. März 2008 17:08
mir ist irgendwie aufgefallen, das die zeichengeschwindigkeit irgendwie langsam wird, vorallem wenn man den ausschnitt vergrößert. das merkt man daran, dass zum beispiel beim verschieben. die modelle der maus etwas hinterherhinken.
deshlab wollte ich mal fragen wie man generell etwas optimieren kann.
ich dachte evtl dran, nicht bei mouse-events sondern über nen timer zu malen, aber bin nicht sicher ob das was bringen würde.
dann dachte ich dran dinge, die eigentlich nur einmal bei bestimmten events gezeichnet werden müssten und nicht bei einem mausmove zu puffern. aber da weis ich nicht wie das geht und ob überhaupt. kandidaten für sowas wären zum bsp.
die wird zum bsp über nen tastendruck aufgerufen und kann beim release der maus wieder ausgeblendet werden.
könnte mir da jemand ein paar tips geben, solche recht einfachen sachen sollten doch schneller gehen....
deshlab wollte ich mal fragen wie man generell etwas optimieren kann.
ich dachte evtl dran, nicht bei mouse-events sondern über nen timer zu malen, aber bin nicht sicher ob das was bringen würde.
dann dachte ich dran dinge, die eigentlich nur einmal bei bestimmten events gezeichnet werden müssten und nicht bei einem mausmove zu puffern. aber da weis ich nicht wie das geht und ob überhaupt. kandidaten für sowas wären zum bsp.
Code: Alles auswählen
drawRangeCircles(*painter, px_painter, pen);könnte mir da jemand ein paar tips geben, solche recht einfachen sachen sollten doch schneller gehen....
Code: Alles auswählen
void BFItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {
Q_UNUSED(widget);
// Painter mit Zoll-Koordinatensystem
painter->setRenderHint(QPainter::Antialiasing);
painter->setRenderHint(QPainter::SmoothPixmapTransform);
//! Painter automatisch so skalieren, dass man mit den "Zoll"werten malt.
painter->scale(*pixels_per_inch, *pixels_per_inch);
// Painter mit standard Pixel-Koordinatensystem
QPainter px_painter;
// px_painter->setRenderHint(QPainter::Antialiasing);
// px_painter->setRenderHint(QPainter::SmoothPixmapTransform);
QPen pen;
selected = dModel->selected();
moving = dModel->moving();
turning = dModel->turning();
std::cout<<turning<<std::endl;
/*!
Modelle zeichnen
*/
drawRangeCircles(*painter, px_painter, pen);
/*!
Eiheiten zeichnen
*/
drawModel(*painter, pen, dModel->position() );
/*!
Modelle selektieren
*/
drawSelCircles(*painter, px_painter, pen);
/*!
Reichweite anzeigen
!es muss darauf geachtet werden, dass nur selektierte markiert werden (in der board wirds �berpr.)
*/
drawRangeCircles(*painter, px_painter, pen);
/*!
Modelle drehen
!es muss darauf geachtet werden, dass nur selektierte markiert werden (in der board wirds �berpr.)
*/
drawAngelGrid(*painter, px_painter);
}