Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QSplashScreen Example not working



  • I am trying to implement a slash screen by editing my main file and adding some of the Qt4 example code.

    this is what I have:
    @
    #include <QtGui/QApplication>
    #include <QSplashScreen>
    #include <QThread>
    #include "mainwindow.h"

    int main(int argc, char *argv[])
    {
    // create application instance
    QApplication a(argc, argv);

    // set up splash screen
    QPixmap pixmap("splash.jpg");
    QSplashScreen *splash = new QSplashScreen(pixmap);
    splash->showMessage("Loading...");
    
    // show splash screen
    splash->show();
    
    // sleep for 3 seconds
    sleep(3);
    
    // show main window
    MainWindow w;
    w.show();
    
    // remove splash screen
    splash->finish(&MainWindow);
    delete splash;
    
    return a.exec&#40;&#41;;
    

    }
    @

    Now for some reason I am getting and error on the splash->finish(&MainWindow); line stating its expecting a primary expression before the line. This confuses me because splash is the main pointer. This is directly from the Qt Documentation as well.

    Any Ideas?



  • @
    splash->finish(&w);
    @

    MainWindow is a type, w a variable of that type. Please consider learning C++ basics before using Qt...

    (Also: do not delete your splash screen before hiding it. Just create it on the stack, or find a way to deleteLater() it when it's closed).



  • Not related though, in the above code, sleep() is working ?



  • I haven't tried though, made a couple of small changes. Might work.

    @#include <QtGui/QApplication>
    #include <QSplashScreen>
    #include <QThread>
    #include "mainwindow.h"

    class I : public QThread
    {
    public:
    static void sleep(unsigned long secs) {
    QThread::sleep(secs);
    }
    };

    int main(int argc, char *argv[])
    {
    QApplication a(argc, argv);
    QPixmap pixmap("splash.jpg");
    QSplashScreen *splash = new QSplashScreen(pixmap);
    splash->showMessage("Loading...");
    splash->show();

    I::sleep(3);
    
    MainWindow w;
    w.show();
    splash->finish(&w);
    
    return a.exec&#40;&#41;;
    

    }@





  • [quote author="peppe" date="1313187434"]http://developer.qt.nokia.com/wiki/Threads_Events_QObjects#92dd35cc61ffc41d02defdcef071856d

    Please.[/quote]

    Thank you Peppe, But,am still curious, how would i use QTimer in the above lines of codes?
    I failed to do :(



  • In the above code, it won't help, as you wanted the sleep before the mainwindow pops up.



  • What about
    @
    int main(int argc, char *argv[])
    {
    QApplication a(argc, argv);
    QPixmap pixmap("splash.jpg");
    QSplashScreen *splash = new QSplashScreen(pixmap);
    splash->showMessage("Loading...");
    splash->show();

    MainWindow w;
    splash->finish(&w);
    
    QTimer t;
    t.setInterval(3000);
    t.setSingleShot(true);
    connect(&t,SIGNAL(timeout()),&w,SLOT(show()));
    connect(&t,SINGAL(timeout()),splash,SLOT(close()));
    t.start();
    
    return a.exec(&#41;;
    

    }
    @
    EDIT: Nevermind, I had a wrong conception of finish() worked. I updated the code. It should work now.



  • bq. I updated the code. It should work now.

    Thanks alot loladiro, will try with this.


Log in to reply