QGraphicsScene, QGraphicsView, QGraphicsItem, Hilfe?

Alles rund um die Programmierung mit Qt
t_b
Beiträge: 41
Registriert: 27. Februar 2010 14:12

Beitrag von t_b »

Ok, ich habe es jetzt so gemacht, dass ich den besagten Winkel eintrage. Das funktioniert wunderbar, nun habe ich testweise verschiedene Fenstergrößen probiert, und nun dreht sich der Pfeil unterschiedlich schnell :shock: . Der Winkel ist doch aber eigentlich unabhängig von der Fenstergröße?!

Ich lade das Projekt einfach mal hoch.
Dateianhänge
QGraphics.7z
(1.42 KiB) 137-mal heruntergeladen
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Code: Alles auswählen

direction->setTransformOriginPoint(direction->boundingRect().width()/2,direction->boundingRect().height()/2);
->

Code: Alles auswählen

direction->setTransformOriginPoint(direction->boundingRect().center());
Ansonsten versteh ich nicht warum sich der Pfeil anders drehen sollte mit ner anderen Fenstergröße.
Die 100Hz braucht es auch nicht, flüssig ist es auch mit 25/30 Hz:

Code: Alles auswählen

timer->start(1000/30);
Vielleicht lohnt auch ein Blick nach QPropertyAnimation.
t_b
Beiträge: 41
Registriert: 27. Februar 2010 14:12

Beitrag von t_b »

mit meiner Timer einstellung gab es diese Unterschiede, mit der vorgeschlagenen Änderung hab ich keine "sichtbaren" Unterschiede.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

t_b hat geschrieben:mit meiner Timer einstellung gab es diese Unterschiede, mit der vorgeschlagenen Änderung hab ich keine "sichtbaren" Unterschiede.
Klar gibt es mit ner Timereinstellung ne Änderung in der Drehgeschwindigkeit. Oder versteh ich dich jetzt komplett verkehrt?

Versuch mal folgendes zum experimentieren:

Code: Alles auswählen

const int framesPerSec = 30;         // Hier Frames pro Sekunde (=Hertz) einsetellen
const int updateInterval = 1000/framesPerSec;
const double rotPerSec = 0.5;              // Hier Umdrehungen pro Sekunde regeln
const double addAngle = rotPerSec*360.0/framesPerSec;

GraphicsWidget::GraphicsWidget(QWidget *parent) :
    QWidget(parent)
{
    ///// [...]
    timer->start(updateInterval);
    //// 
}
void GraphicsWidget::rotate()
{
    if (angle >= 360) {
        angle = 0;
    } else
    {
        angle += addAngle;
    }
    direction->setRotation(angle);
    // das scene->update(); view->update() sind total überflüssig und kosten nur Rechenzeit ;)
}
BTW ist QGraphicsItem::rotation ein qreal (==double), kein int.
Antworten