Seite 1 von 1

QLabel ruckelt

Verfasst: 23. Februar 2011 17:04
von hannes22
Hi Leute,
ich möchte einen zweiten Cursor haben, der sich neben dem ersten, normalen Cursor bewegt. Dazu nehme ich ein QLabel und setze dort eine kleine Pixmap hinein. Das QLabel verschiebe ich dann synchron zum ersten Cursor.

Erst'mal Das Label herstellen:

Code: Alles auswählen

    cursor2P = new QPixmap ("Cursor.png");
    cursor2L = new QLabel (this);
    cursor2L->setPixmap (*cursor2P);
    cursor2L->setAutoFillBackground(false);
    cursor2L->setFrameStyle(QFrame::NoFrame);
    cursor2L->setLineWidth(0);
    cursor2L->show();

    setMouseTracking(1);
nun die Mouse Bewegung:

Code: Alles auswählen

void BV::mouseMoveEvent(QMouseEvent *event)
{
    int x,y,isdiff;
    x = event->x();
    y = event->y();
    cursor2L->hide();
    cursor2L->move(x-90,y);
    cursor2L->show();
    printf("%4d %4d\n", x, y);
}
Das funktioniert auch soweit aber der zweite Cursor ruckelt.
Wenn ich die Mouse nach unten bewege ruckelt es stark nach oben fast nicht.
Nach rechts ruckelt es wenig nach links springt es um 30 ca. Pixel. Das wird auch in der Ausgabe mit printf angezeigt.
Hat jemand eine Idee woran das liegt?

Hannes

Verfasst: 23. Februar 2011 18:54
von hannes22
Ich hab noch etwas probiert:

Code: Alles auswählen

void BV::timerEvent(QTimerEvent *)  // (  mit  QObject::startTimer(1);  also 1ms)

{
   static int i=10;
   cursor2L->move(1010-i, 100);
   cursor2L->show();
   i++;
   if (i>1000) i=10;
}
Das ruckelt nicht, egal welche Richtung;

Wenn ich dies

Code: Alles auswählen

void BV::mouseMoveEvent(QMouseEvent *event)
{
    int x,y,isdiff;
    x = event->x();
    y = event->y();
    //cursor2L->hide();
    //cursor2L->move(x-90,y);
    //cursor2L->show();
    printf("%4d %4d\n", x, y);

}
schreibe "ruckelt" die Ausgabe im Terminel auch nicht.
Potzblitz, was ruckelt denn da und wie stelle ich das ab?
Hat jemand eine Idee?
Hannes

Verfasst: 23. Februar 2011 19:34
von hannes22
Tja, ich hab noch weiter blöd rumprobiert:
Die Pixmap ist 40*40 Pixel. Damit ist man mit 90Pixel Abstand eigentlich weit weg.
Und nun kommts:

Code: Alles auswählen

  cursor2L->move(x-90,y);     // ruckelt - ist ja die Zeile von oben
  cursor2L->move(x-190,y);   // ruckelt nicht
  cursor2L->move(x+90,y);    // na? Richtig, ruckelt auch nicht 
Üble Falle. Damit kann ich aber leben. Trotzdem, wenn jemand eine Ahnung hat warum das so ist oder was man nicht machen darf (ala Ist doch klar Abstand muß 2*Pixmapbreite +10 Pixel betragen) dann wäre ich dankbar für eine Erklärung.
Hannes