Seite 1 von 1
Fotoshow wenn kein Mausklick
Verfasst: 16. August 2010 14:02
von MissG
Hallo allerseits,
ich möchte eine fotoshow laufen lassen, wenn in meinem Prog eine gewisse zeit nicht los ist. Also wenn mit der Maus nicht geklickt wurde.
ich verfolge die Idee, dass ich sage:
Wenn kein Mausklick erkannt wird, dann starte timer und zähle bis 5sekunden und dann starte fotoshow.
Und das ganze mit SLOT /SIGNAL...allerdings klappt es nicht so ganz..
Hat jemand vielleicht eine andere Variante als mit SLOT/SIGNAL.
Re: Fotoshow wenn kein Mausklick
Verfasst: 16. August 2010 14:04
von franzf
MissG hat geschrieben:Und das ganze mit SLOT /SIGNAL...allerdings klappt es nicht so ganz..
Hat jemand vielleicht eine andere Variante als mit SLOT/SIGNAL.
Es klappt aber ganz sicher mit SIGNAL/SLOT. Wenn es nicht klappt machst du etwas falsch, und den Fehler findet man nur mit deinem Code.
Eine Alternative ohne SIGNAL/SLOT wäre die Verwendung von timerEvent().
Verfasst: 16. August 2010 15:02
von MissG
klappt mit SIGNAL/SLOT...mit intensiver code Kontrolle!

Verfasst: 16. August 2010 16:52
von padreigh
Nette Idee ... nur läuft dein Prog ja nicht im luftleeren Raum ... wenn der User nicht "aktiv" was macht kann sich dein Prozess schlafen legen und andere Dinge im Hintergrund dürfen arbeiten - du läßt dein Prog aber Dauerarbeiten --> Systemlast

... andererseits ... wenn du nur alle 5s oder so ein Bild änderst, passiert da auch nicht viel.
Wenn du deinem MainWidget ein
setMouseTracking(true); spendierst und einen globalen timer benutzt den du im
virtual void mouseMoveEvent ( QMouseEvent * event ) imer wieder startest bedarf es vielleicht nicht ganz so doller code controlle?
Verfasst: 16. August 2010 18:32
von MissG
mein Mainwidget ist ein MainDialog

, da ging es mit dem mousetracking nicht. sonst hätt ich das so gemacht. Gerade dies war die herasuforderung, wenn man es so sagen darf

).
Allerdings gibts etwas probleme beim verlassen der fotoshow, wenn der user aktiv wird...der rechner ist nicht so das schnellste..
Kann es daran liegen, dass ich zuviele bilder lade. Ich habe die Bilder in eine Widget gepackt und dann alle geladen. Und lass die durch eine switch anweisung durchlaufen. Die anweisung ist halt eine Zahl die ich dann incrementiere.
Laden tu ich die bilder mit QPixmap, gibt es da vielleicht eine bessere, zB QImage etc?
Könnte man denn in ein QDialog ein mouseEvent einbinden?
Verfasst: 16. August 2010 18:50
von franzf

Du lädst alle Bilder bei Programmstart und wunderst divh über Prformanceprobleme...
Speicher doch nur in einer QStringList die Pfade zu den Bildern, und Lade bei Bedarf evtl. ein zusätzliches als notwendig (so dass das nächste schon gecached ist). Mehr brauchst du nicht.
Verfasst: 16. August 2010 18:54
von MissG
ok.. wenn ich nur gewusst hätte, dass es eine stringlist gibt
danke für den Tip, versuch ich gleich morgen...
ps: hab nicht lange mit Qt zu tun, es brauch so seine Zeit bis man alle klassen kennt

Verfasst: 16. August 2010 20:17
von padreigh
QDialog erbt von QWidget und das hat das mit der Maus

aber wenn du sagst es geht nicht dann glaub ich das mal
edit:
glaub ich das mal (== ich hab keine Lust es zu überprüfen, machs selbst, wenn ichs brauch, test ichs

)
Ich finde franzf gut

Verfasst: 16. August 2010 21:01
von franzf
Das ist doch keine Glaubenssache, und probiert ist es sofort
Code: Alles auswählen
#include <QDialog>
#include <QMouseEvent>
#include <QDebug>
#include <QApplication>
class Win : public QDialog {
void mouseMoveEvent(QMouseEvent* e) {
qDebug() << "Mouse Move" << e->pos();
}
};
int main(int argc, char** argv) {
QApplication app(argc, argv);
Win w;
w.setMouseTracking(true);
w.exec();
return app.exec();
}
Was soll ich sagen - die qDebug()s kommen an, ergo es geht.
Verfasst: 17. August 2010 00:55
von MissG
hmm, also in der Docu habe ich das nicht gesehen...bzw überlesen das QDialog von QWidget ist
na dann....gleich anwenden

)