QPropertyAnimation und qWait | Navigationsbalken ausfaden

Alles rund um die Programmierung mit Qt
Antworten
lx2
Beiträge: 75
Registriert: 5. Mai 2009 03:13

QPropertyAnimation und qWait | Navigationsbalken ausfaden

Beitrag von lx2 »

Hi,

habe eine Animation die meinen Navigationsbalken nach oben ausfaden soll:

Code: Alles auswählen

QPropertyAnimation *animation = new QPropertyAnimation(ui->gr_top, "geometry");
animation->setDuration(500);
animation->setStartValue(QRect(9, 9, 1500, 68));
animation->setEndValue(QRect(9, -250, 1500, 68));
animation->start();
Danach kommt ein Loop in dem

Code: Alles auswählen

QTest::qWait(1000) 
vorkommt. Es wird also immer eine Sekunde gewartet.
Dooferweise wird mein ui->gr_top immer nach der ersten Sekunde zurückgesetzt

Jetzt hab ich beim Debuggen festgestellt, das die Funktion qWait dafür verantwortlich ist. Ich nehm mal an die macht sowas wie Gui zurücksetzten ?

Hab dann noch probiert, manuell vor und nach dem qWait die position zu setzen

Code: Alles auswählen

ui->gr_top->setGeometry(QRect(9, -250, 1500, 68));
Dann blinkt meine topNavi immer kurz (für ein bruckteil einer Sekunde) ist danach aber wieder zurückgesetzt.


Habt ihr ne Idee wie ich das hinbekomm?
Zuletzt geändert von lx2 am 15. Januar 2010 16:11, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Was soll das qWiat überhaupt? Doku dazu schonmal durchgelesen? Was willst du damit testen??
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
lx2
Beiträge: 75
Registriert: 5. Mai 2009 03:13

Beitrag von lx2 »

klar weiß ich das es eigentlich zum testen ist.

void QTest::qWait ( int ms ) [static]
Waits for ms milliseconds. While waiting, events will be processed and your test will stay responsive to user interface events or network communication.



ich weiß nicht ob ich das qWait damit "vergewaltige", aber ich benutze es um in regelmäßigen abständen eine for-schleife zu unterbrechen.

Die for-schleife setzt jede sekunde eine zufallszahl in mein Textfeld, danach geht die funktion weiter und listet alle bisherigen zufallszahlen in einem ergebnisfeld auf und macht noch einige sachen. Ich brauch also einen echten unterbrecher...

so sachen wie Qtimer laufen ja nebenher.

Oder gibts da ähnliche funktionen die genauso unterbrechen wie qWait() oder die sogar genau für diesen zweck gemacht sind?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wenn man die GUI nicht einfrieren lassen will sollte man Threads zum Berechnen der Daten benutzen. Als Hack geht auch QApplication::processEvents()
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
lx2
Beiträge: 75
Registriert: 5. Mai 2009 03:13

Beitrag von lx2 »

jetzt such ich schon eine stunde, und finde nix passendes,

also alle sleep funktionen frieren mein programm ein, das will ich nicht.
ich brauche also ein wait.

habs mal mit

Code: Alles auswählen

thread()->wait(1000);
versucht, wird aber komplett ignoriert.


Lösungen in dem ich die Klasse QThread abgeleitet habe, da ja QThread::msleep() protected ist, haben auch immer nur blockiert.

was nun ?

-----------------------------------------
sowas geht leider NICHT, weil es blockiert:

Code: Alles auswählen

class sotoSleep : public QThread
{
        public:
                static void sleep(unsigned long secs)
                {
                        QThread::sleep(secs);
                }
                static void msleep(unsigned long msecs)
                {
                        QThread::msleep(msecs);
                }
                static void usleep(unsigned long usecs)
                {
                        QThread::usleep(usecs);
                }
};

...

sotoSleep::msleep(1000);


edit:

hat irgendwie an setFullscreen(); in verbindung mit Layoutverwendung gelegen. Habs jetzt mit setVisible(false) nach dem fadeout gelöst
Zuletzt geändert von lx2 am 17. Januar 2010 14:48, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich habe doch zwei Möglichkeiten gegeben... :?
Warum musst Du überhaupt warten? Was willst Du erreichen? Ich schätze mal der Ansatz ist falsch.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten