PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Splash Screen ?



microdigi
26-09-2002, 10:59
Diese Nachricht trifft sicher wieder Anda_koa :)

Bei MSWindoof gibts doch den SplashScreen,
der beim starten eines programmes fuer eine kurze weile
auf dem schirm erscheint.

kann ich hier nur einen tipp! erhalten wie man das unter linux X11 (KDE/QT)
bewerkstelligen kann ? keine einzelheiten.
hab schon nach einer derartigen class gesucht,
aber nix gefunden.

danke - sagt digi
achja - es brennt nicht :)

anda_skoa
26-09-2002, 11:06
Ich denke, du kannst jedes QWidget nehmen, solange du als Parent 0 nimmt wird es ein Toplevel Widget.
Einfach im main.cpp erzeugen und show()

Eventuell kann man auch mit dem WFlags Parameter (dritter im QWdiget Constructor) noch mehr machen.

Einige Programme des KDE Edu Paketes machen Splashscreens (bzw. machten, es widerspricht den Styleguidelines), man könnte in deren Sourcen nachsehen.

Ciao,
_

microdigi
27-09-2002, 08:19
danke! underscore :)
ich werd dir das ergebnis hier poschten.

das mit den slots hat sich als 'ist soooo einfach' herausgestellt. staun.

gruss - digi

microdigi
28-09-2002, 10:34
also der splash screen war ja nun die einfachste sache der welt...:)
auch der timer war'n wirklicher klacks.
wenigstens vom prinzip her.

nun noch ne frage:
wie kann ich das ding dazu bringen,
in etwa der mitte der originalen applikation zu erscheinen,
also nicht irgendwo auf dem bildschirm.
ich moechte das ding aber auch nicht auf einer fixen position festnageln,
sondern stets relativ zur umrandung des main windows der applikation
positionieren.

danke wieder fuer kurz-kommentar
sagt - dig

anda_skoa
28-09-2002, 10:55
Hmm, wenn du noch kein Haupfenster hast, wird es schwierig dessen Position zu bestimmen :)

Aber wenn du eins hast, sagt dir dessen geometry() Methode (geerbt von QWidget) wo es ist, und wie groß es ist (QRect)
Bzw, dessen pos() Methode, wo es ist (QPoint) oder x() und y()



auch der timer war'n wirklicher klacks.


Wenn du den Timer nur einmal brauchst, was ja beim Splashsreen wahrscheinlich ist, dann kannst du auch QTimer::singleShot benutzen.
Dann braucht man keine QTimer Instanz :)


Ciao,
_

microdigi
28-09-2002, 16:03
natuerlich wurde es ein single shot timer.....:)

aber aeh... ich brauch doch aber die instanz; denn wie soll der denn sonst
ein signal senden wenns denn so weit ist? :confused:

und mit dem main window das werde ich wohl auch noch schaffen.
brennt nur momentan (noch) nicht.

gruss & danke - digi

anda_skoa
29-09-2002, 21:26
Original geschrieben von microdigi
aber aeh... ich brauch doch aber die instanz; denn wie soll der denn sonst
ein signal senden wenns denn so weit ist? :confused:


Ich weiß nicht, wie Qt das intern macht, aebr es gibt eine Methode
static QTimer::singleShot

Das sie static ist, braucht man auch keine Instanz.

Ciao,
_

fs111
30-09-2002, 09:23
Könntest Du den Beispliecode mal posten? Ich möchte mir das mal ansehen. Ich habe das in Java schon mal gemacht, aber in C++ stehe ich da etwas auf dem Schlauch.

Danke und Grüße

fs111

microdigi
30-09-2002, 18:02
latuernich kann ich dir deb bsp-code poschten :)

pflueck ihn ein wenig auseinander.
ich hab da n paar klassen, die mit GROSSbuchstaben laufen.
wirst schon admit klarkommen.

und natuerlich brauchst du das ui dazu.



im main.cpp:

#ifdef SPLASH_SCREEN_USED
SplashScreen splash_screen;
SPLASH_SCREEN_NAME_OBJ = &splash_screen;
splash_screen.show();
QTimer timer;
signals_and_slots.SetTimerConnectionAndStart(&timer);
#endif



in anderen classes:


SignalsAndSlots::SetTimerConnectionAndStart (QTimer* timer){
if (OK != CONNECT (timer, timeout(), this, TimerDone_slot()))
RETURN;
timer->start (SPLASH_SCREEN_TIME_DURATION, SINGLE_SHOT);




void SignalsAndSlots::TimerDone_slot(){
UTILS_NAME_OBJ->TimeOutForSplashScreen (SPLASH_SCREEN_NAME_OBJ);
}


void Utils::TimeOutForSplashScreen (SplashScreen* sp_scr){
CLOSE_OBJ_P (sp_scr);
}


hinter den CAPS verbergen sich die ueblichen ptr auf classes.