Sollte ich das Bild als Hintergrund auf ein Widget legen, oder sollte ich über ein PaintView gehen?
Blinkende Punkte auf einem Bild
Blinkende Punkte auf einem Bild
Ich möchte in einem Bild Punkte haben, die blinken. Wie kann man das realisieren. Die Referenz über das painting habe ich gelesen, werde da aber nicht wirklich schlau draus
Sollte ich das Bild als Hintergrund auf ein Widget legen, oder sollte ich über ein PaintView gehen?
Sollte ich das Bild als Hintergrund auf ein Widget legen, oder sollte ich über ein PaintView gehen?
QGraphicsView ist doch ein Ansatz oder nicht? Ok, hier noch mehr Hinweise:sanni hat geschrieben:Dann gib doch mal einen Ansatz an,
ich steige da einfach nicht durch . . .
*) QGraphicsEllipseItem
*) QTimeLine
*) QGraphicsItemAnimation
z.B.
Du kannst natürlich auch ein eigenes Widget implementieren und dem ein property "dotColor" geben, und dann einfach ne QPropertyAnimation drauf loslassen.
Und natürlich: Doku + Examples
Sollte als Ausgangspunkt für eigene Experimente reichen.
Hmmm, WAS verstehst du denn nicht?
Der prinzipielle Aufbau wird doch in allen Beispielen gezeigt:
Und wenn du noch nen pen und brush mitgibst hat das Ding gleich auch ne Farbe und nen Rand.
Ich seh leider grad, dass QGraphicsItemAnimation als deprecated markiert ist. Wie animiert man denn jetzt einfache QGraphicsItems? Ein EllipseItem ist ja leider (noch?) kein QGraphicsObject, so dass man ne QPropertyAnimation nehmen könnte.
// edit:
Ok, Animation via Qt Animation Framework:
http://doc.qt.nokia.com/4.6/animation-o ... -framework
Du willst den "brush" als Property deklarieren.
Der prinzipielle Aufbau wird doch in allen Beispielen gezeigt:
Code: Alles auswählen
QGraphicsView* view = new QGraphicsView;
QGraphicsScene* scene = new QGraphicsScene;
view->setScene(scene);
QGraphicsEllipseItem* circle = scene->addEllipse( pos_x, pos_y, circle_diameter, circle_diameter ); // Kreis an Position (pos_x, pos_y) mit Durchmesser circle_diameterIch seh leider grad, dass QGraphicsItemAnimation als deprecated markiert ist. Wie animiert man denn jetzt einfache QGraphicsItems? Ein EllipseItem ist ja leider (noch?) kein QGraphicsObject, so dass man ne QPropertyAnimation nehmen könnte.
// edit:
Ok, Animation via Qt Animation Framework:
http://doc.qt.nokia.com/4.6/animation-o ... -framework
Du willst den "brush" als Property deklarieren.
Code: Alles auswählen
QGraphicsRectItem *pin = . . .
pin->setBush( Qt::white );
QTimeLine *timer = ...
timer->setRange( 0, 2 );
QGraphicsItemAnimation *anim = ...
anim->setItem( pin );
anim->setTimeLine( timer );
for( int ii=0; ii<=2; ii++ ){
anim->setScaleAt( ii/2.0, ii, ii );
}
QGraphicsScene scene = ...
scene->additem( pin );
QGraphicsview *view = ...
...
timer->setLoopCount( 3 );
timer->start();
Aber warum geht der Punkt von Links oben nach Rechts unten?
Eigentlich sollte er jetzt dreimal blinken und nicht wanden oder?
Was wandert? das liegt einfach am Origin des Koordinatensystems. Du willst wahrscheinlich, dass das Zentrum des Rechtecks immer an der selben Stelle bleibt, und nicht oben links. Das musst du umrechnen, und auch noch ein setPosAt an die Animation hängen.sanni hat geschrieben:Eigentlich sollte er jetzt dreimal blinken und nicht wanden oder?
Im übrigen hab ich bei "blinken" nicht an skalieren gedacht, sondern dass du eine Farb-Transformation (z.B. rot->gelb->rot->...) machen willst - blinken halt.
Die von dir beschriebene Farb-Transformation hat den Nachteil, dass man immer einen Teil des "Blinkers" sehen kann. Ich hatte mir eher vorgestellt, dass der Blinker nur aus dem "Licht" besteht. Das würde man nicht sehen, wenn der Blinker gerade 'aus' ist.
Deshalb bin ich jetzt dazu übergegangen, pin über die Methode setVisible() sichtbar zu (bzw. nicht sichtbar).
Es ergibt sich aber ein anderes Problem beim Blinken.
Das Blink-Signal folgt selber einer etwas komplexeren Struktur (kein Auto-blinken). Es ist eine Folge von unterschiedlich langen Leucht/nicht-Leucht-Perioden.
Um die zu realisieren habe ich versucht die komplexe Folge von Licht-Signalen in eine TimeLine zu legen, welche vom Timer in bestimmten Abständen gestartet wird:
Leider wird beim ti->start() von slotB() ein Speicherzugriffsfehler gemeldet, und das Programm abgebrochen. Quizfrage: Warum?
Es sind doch unterschiedliche Signale und Slots
Deshalb bin ich jetzt dazu übergegangen, pin über die Methode setVisible() sichtbar zu (bzw. nicht sichtbar).
Es ergibt sich aber ein anderes Problem beim Blinken.
Das Blink-Signal folgt selber einer etwas komplexeren Struktur (kein Auto-blinken). Es ist eine Folge von unterschiedlich langen Leucht/nicht-Leucht-Perioden.
Um die zu realisieren habe ich versucht die komplexe Folge von Licht-Signalen in eine TimeLine zu legen, welche vom Timer in bestimmten Abständen gestartet wird:
Code: Alles auswählen
QTimeLine *ti = new QTimeLine( 1000, this );
connect( ti, SIGNAL( valueChanged( qreal ) ), this, SLoT( slotA( qreal ) ) );
QTimer *t = new QTimer( this );
connect( timer, SIGNAL( timerout() ), this, SLOT( slotB() ) );
timer->start( 10000 );
/*****/
slotA( qreal r ){
if( r>0.3 ){
pin->setVisible( false );
}else{
pin->setVisible( true );
}
}
slotB(){
ti->setLoopCount( 3 );
ti->start();
}
Es sind doch unterschiedliche Signale und Slots