[gelöst]Qt SplashScreen problem

Verschiedenes zu Qt
Nash
Beiträge: 118
Registriert: 27. April 2007 14:49

[gelöst]Qt SplashScreen problem

Beitrag von Nash »

Bin ein neuer user im Umgang mit Qt.
Ich will einfach mal einen SplashScreen anzeigen, funktioniert aber nicht,
er zeigt mir gar nix an. Nur meinen Hauptdialog.

Hier der Komplette Code meiner Main.cpp

Code: Alles auswählen

#include <Qt/QApplication.h>
#include <Qt/QSplashScreen.h>
#include <Qt/QMainwindow.h>

// QT includes
#ifdef Q_WS_WIN
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
int main(int argc, char **argv);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
                                 LPSTR lpCmdLine, int nCmdShow)
{
  return main(__argc, __argv);
}
#endif

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

	QPixmap pixmap(":/images/splash.png");
	QSplashScreen* splashScreen = new QSplashScreen(pixmap,Qt::WindowStaysOnTopHint );
	
	splashScreen->show();
	splashScreen->showMessage("Initialising Engine", Qt::AlignCenter |Qt::AlignBottom | Qt::AlignAbsolute, Qt::black);
	app.processEvents();
	for(double i=0;i<10000000;i++)
	{
	}
	
     QMainWindow window;
     window.show();
	 splashScreen->finish(&window);
   

	

    return app.exec();
}
Zuletzt geändert von Nash am 27. August 2007 12:02, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Erstens

Das

Code: Alles auswählen

// QT includes
#ifdef Q_WS_WIN
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
int main(int argc, char **argv);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                                 LPSTR lpCmdLine, int nCmdShow)
{
  return main(__argc, __argv);
}
#endif
Ist völlig überflüssig und sogar kontraprdouktiv

Und zweites - wenn deine App icht in den Eventloop (app.exec()) kommt, kann auch kein Splashscreen angezeigt werden.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Nash
Beiträge: 118
Registriert: 27. April 2007 14:49

Beitrag von Nash »

ich möchte aber nicht die Konsole immer sehen.
hast du eine bessere Lösung?

warum soll er nicht in meinen event loop kommen?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Nash hat geschrieben:ich möchte aber nicht die Konsole immer sehen.
hast du eine bessere Lösung?
Siehe Doku -> http://doc.trolltech.com/4.2/qmake-vari ... tml#config 'windows' und 'console'
warum soll er nicht in meinen event loop kommen?
Wie denn? Die Eventloop wird erst bei app.exec() gestartet, also kann auch nichts angezeigt werden.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Nash
Beiträge: 118
Registriert: 27. April 2007 14:49

Beitrag von Nash »

keine Ahnung was du meinst.

Code: Alles auswählen

 MainWindow window;
	
	splashScreen->finish(&window);
    window.show();
    return app.exec();
bei mir läuft er in den eventloop rein

wo soll ich das app.exec() denn nun aufrufen?

hier der code von der qt seite, sehe da keinen unterschied

Code: Alles auswählen

int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     QPixmap pixmap(":/splash.png");
     QSplashScreen splash(pixmap);
     splash.show();
     app.processEvents();
     ...
     QMainWindow window;
     window.show();
     splash.finish(&window);
     return app.exec();
 }
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Nash hat geschrieben:keine Ahnung was du meinst.

Code: Alles auswählen

 MainWindow window;
	
	splashScreen->finish(&window);
    window.show();
    return app.exec();
bei mir läuft er in den eventloop rein
Ja, aber da window dann schon angezeigt wird bleibt keine Zeit für den Splashscreen. Die Ventloop started nunmal erst innerhalb app.exec()! Siehe auch Doku
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Nash
Beiträge: 118
Registriert: 27. April 2007 14:49

Beitrag von Nash »

also ich probiere mal zu erklären, mein splashscreen ist einfach zu schnell, er wird angezeigt und gleich wieder geschlossen, kann es das sein?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Er wird gar nicht angezeigt weil er nicht angezeigt wird (da finish(&window)) den Splashscreen beendet wenn window angezeigt wird, was ja der Fall ist wenn dein Programm das erste mal Events abarbeiten kann.

Hast du Dir überhaupt mal den Link durchgelesen?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Nash
Beiträge: 118
Registriert: 27. April 2007 14:49

Beitrag von Nash »

ja, und warum fügen die dann diesen code dort ein?
der ist ja dann falsch
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Nash hat geschrieben:ja, und warum fügen die dann diesen code dort ein?
der ist ja dann falsch
Was ist da falsch? Ich würde mir erstmal die Grundlagen der Eventloop durchlesen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Nash
Beiträge: 118
Registriert: 27. April 2007 14:49

Beitrag von Nash »

erkläre mir doch bitte an meinem Beispiel wie ich meinen SplashScreen anzeigen kann. Daraus kann ich dann lernen.
Nash
Beiträge: 118
Registriert: 27. April 2007 14:49

Beitrag von Nash »

er hat den Pfad zum Bild nicht gefunden, das gute pixmap liefert mir leider keinen Null zeiger zurück, wenn er kein Bild findet.

Nix hier mit eventloop...der code war korrekt
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Nash hat geschrieben:edas gute pixmap liefert mir leider keinen Null zeiger zurück, wenn er kein Bild findet.
Ist ja auch kein Pointer sondern ein Objekt
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Nash
Beiträge: 118
Registriert: 27. April 2007 14:49

Beitrag von Nash »

jetzt weiß ich wie ich über VS qrc files generieren kann.

so findet er dann auch die Bilder.

anbei du hattest gesagt das das hier keine gute Lösung sei für QT ohne Konsole öffnen:

Code: Alles auswählen

#ifdef Q_WS_WIN
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
int main(int argc, char **argv);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                                 LPSTR lpCmdLine, int nCmdShow)
{
  return main(__argc, __argv);
}
#endif 
gibt es eine besser in Visual Studio?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Nash hat geschrieben: gibt es eine besser in Visual Studio?
Habe ich doch oben schon geschrieben...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten