Fotoshow wenn kein Mausklick

Alles rund um die Programmierung mit Qt
Antworten
MissG
Beiträge: 7
Registriert: 12. August 2010 11:10

Fotoshow wenn kein Mausklick

Beitrag 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.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Fotoshow wenn kein Mausklick

Beitrag 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().
MissG
Beiträge: 7
Registriert: 12. August 2010 11:10

Beitrag von MissG »

klappt mit SIGNAL/SLOT...mit intensiver code Kontrolle! :)
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag 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?
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
MissG
Beiträge: 7
Registriert: 12. August 2010 11:10

Beitrag 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?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

:shock: 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.
MissG
Beiträge: 7
Registriert: 12. August 2010 11:10

Beitrag 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 :)
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag 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 :)
Zuletzt geändert von padreigh am 16. August 2010 23:26, insgesamt 2-mal geändert.
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Das ist doch keine Glaubenssache, und probiert ist es sofort :P

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.
MissG
Beiträge: 7
Registriert: 12. August 2010 11:10

Beitrag von MissG »

hmm, also in der Docu habe ich das nicht gesehen...bzw überlesen das QDialog von QWidget ist :)

na dann....gleich anwenden :))
Antworten