Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. SplashScreen stay on TaskManager
Forum Updated to NodeBB v4.3 + New Features

SplashScreen stay on TaskManager

Scheduled Pinned Locked Moved Unsolved General and Desktop
splashscreentask manager
29 Posts 3 Posters 10.5k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    mrjj
    Lifetime Qt Champion
    wrote on 1 Jan 2017, 17:10 last edited by mrjj 1 Jan 2017, 17:11
    #4

    Oh. that way.
    Well you dont have a MainWindow.
    QApplication will close application when the last window is closed.
    Not sure it knows about QSplashScreen.

    But when you dont have any mainwindow/top level widgets, it keeps running.

    You can make it exit calling quit() but its hard with just a QSplashScreen.

    So as you see in tut 28. he does have Mainwindow also ?

    Q 1 Reply Last reply 1 Jan 2017, 17:14
    1
    • M mrjj
      1 Jan 2017, 17:10

      Oh. that way.
      Well you dont have a MainWindow.
      QApplication will close application when the last window is closed.
      Not sure it knows about QSplashScreen.

      But when you dont have any mainwindow/top level widgets, it keeps running.

      You can make it exit calling quit() but its hard with just a QSplashScreen.

      So as you see in tut 28. he does have Mainwindow also ?

      Q Offline
      Q Offline
      QtA_
      wrote on 1 Jan 2017, 17:14 last edited by
      #5

      @mrjj said in SplashScreen stay on TaskManager:

      Oh. that way.
      Well you dont have a MainWindow.
      QApplication will close application when the last window is closed.
      Not sure it knows about QSplashScreen.

      But when you dont have any mainwindow/top level widgets, it keeps running.

      You can make it exit calling quit() but its hard with just a QSplashScreen.

      So as you see in tut 28. he does have Mainwindow also ?

      yes the tutorial have windows application...
      but I don't need it..

      in fact my project is simple,...
      I want to make a splashscreen with PNG transparency,..(without windows form)
      so I don't know if this is the way to go for it..

      I want to start with this,..and then,..add features...to be customized,.like time delay, fadein/fadeout, animated PNG etc...

      M 1 Reply Last reply 1 Jan 2017, 17:20
      0
      • Q QtA_
        1 Jan 2017, 17:14

        @mrjj said in SplashScreen stay on TaskManager:

        Oh. that way.
        Well you dont have a MainWindow.
        QApplication will close application when the last window is closed.
        Not sure it knows about QSplashScreen.

        But when you dont have any mainwindow/top level widgets, it keeps running.

        You can make it exit calling quit() but its hard with just a QSplashScreen.

        So as you see in tut 28. he does have Mainwindow also ?

        yes the tutorial have windows application...
        but I don't need it..

        in fact my project is simple,...
        I want to make a splashscreen with PNG transparency,..(without windows form)
        so I don't know if this is the way to go for it..

        I want to start with this,..and then,..add features...to be customized,.like time delay, fadein/fadeout, animated PNG etc...

        M Offline
        M Offline
        mrjj
        Lifetime Qt Champion
        wrote on 1 Jan 2017, 17:20 last edited by
        #6

        @QtA_
        Ok, "(without windows form)" means with no borders or caption etc?

        I think you can use splashscreen for this but not sure its really needed.

        Will it be sort of a class others can use , as a super splashscreen thing or
        what is the goal ?

        Well you current issue can be fixed by calling apps quit() when you want the app to exit.
        like 2 timers. one call close for splashscreen and other call quit()
        but it all depends on how u want it to work.

        Q 1 Reply Last reply 1 Jan 2017, 17:31
        0
        • M mrjj
          1 Jan 2017, 17:20

          @QtA_
          Ok, "(without windows form)" means with no borders or caption etc?

          I think you can use splashscreen for this but not sure its really needed.

          Will it be sort of a class others can use , as a super splashscreen thing or
          what is the goal ?

          Well you current issue can be fixed by calling apps quit() when you want the app to exit.
          like 2 timers. one call close for splashscreen and other call quit()
          but it all depends on how u want it to work.

          Q Offline
          Q Offline
          QtA_
          wrote on 1 Jan 2017, 17:31 last edited by
          #7

          @mrjj said in SplashScreen stay on TaskManager:

          @QtA_
          Ok, "(without windows form)" means with no borders or caption etc?

          I think you can use splashscreen for this but not sure its really needed.

          Will it be sort of a class others can use , as a super splashscreen thing or
          what is the goal ?

          Well you current issue can be fixed by calling apps quit() when you want the app to exit.
          like 2 timers. one call close for splashscreen and other call quit()
          but it all depends on how u want it to work.

          that's why I'm here :)

          I'm a biginner with C++, so need to understand manything actually.
          my english is also not very good, but its ok I think. :)

          The goal should be something like this:

          1. create an EXE allowing parameters to show splashscreen.

          ex:
          mysplash.exe "c:/my images/logo1.png" /d:3 /fi:1 /fo:1

          wich:
          /d = delay
          /fi = fade in time delay
          /fo = fade out time delay

          then,...few version after,...allowing to execute splash with mutliple image running to make an animated splash with PNG files.. :)

          M 1 Reply Last reply 1 Jan 2017, 17:36
          0
          • Q QtA_
            1 Jan 2017, 17:31

            @mrjj said in SplashScreen stay on TaskManager:

            @QtA_
            Ok, "(without windows form)" means with no borders or caption etc?

            I think you can use splashscreen for this but not sure its really needed.

            Will it be sort of a class others can use , as a super splashscreen thing or
            what is the goal ?

            Well you current issue can be fixed by calling apps quit() when you want the app to exit.
            like 2 timers. one call close for splashscreen and other call quit()
            but it all depends on how u want it to work.

            that's why I'm here :)

            I'm a biginner with C++, so need to understand manything actually.
            my english is also not very good, but its ok I think. :)

            The goal should be something like this:

            1. create an EXE allowing parameters to show splashscreen.

            ex:
            mysplash.exe "c:/my images/logo1.png" /d:3 /fi:1 /fo:1

            wich:
            /d = delay
            /fi = fade in time delay
            /fo = fade out time delay

            then,...few version after,...allowing to execute splash with mutliple image running to make an animated splash with PNG files.. :)

            M Offline
            M Offline
            mrjj
            Lifetime Qt Champion
            wrote on 1 Jan 2017, 17:36 last edited by
            #8

            @QtA_
            ahh, sort of fancy app loader. :)
            well that is a fun project.

            You english is fine. :)

            That should be possible for a first project. Good luck and feel free to ask.

            Q 1 Reply Last reply 1 Jan 2017, 17:38
            0
            • M mrjj
              1 Jan 2017, 17:36

              @QtA_
              ahh, sort of fancy app loader. :)
              well that is a fun project.

              You english is fine. :)

              That should be possible for a first project. Good luck and feel free to ask.

              Q Offline
              Q Offline
              QtA_
              wrote on 1 Jan 2017, 17:38 last edited by
              #9

              @mrjj said in SplashScreen stay on TaskManager:

              @QtA_
              ahh, sort of fancy app loader. :)
              well that is a fun project.

              You english is fine. :)

              That should be possible for a first project. Good luck and feel free to ask.

              Thank you very much,..
              I'm a fancy girl :)

              return a.quit();
              

              do not close the process,..do I miss something ?

              M 1 Reply Last reply 1 Jan 2017, 17:40
              0
              • Q QtA_
                1 Jan 2017, 17:38

                @mrjj said in SplashScreen stay on TaskManager:

                @QtA_
                ahh, sort of fancy app loader. :)
                well that is a fun project.

                You english is fine. :)

                That should be possible for a first project. Good luck and feel free to ask.

                Thank you very much,..
                I'm a fancy girl :)

                return a.quit();
                

                do not close the process,..do I miss something ?

                M Offline
                M Offline
                mrjj
                Lifetime Qt Champion
                wrote on 1 Jan 2017, 17:40 last edited by mrjj 1 Jan 2017, 17:43
                #10

                @QtA_
                Hi
                do you now have
                return a.exec();
                return a.quit();

                ?

                it stays inside a.exec().

                you can try
                QTimer::singleShot(2500,&app,SLOT(quit()));
                should kill it all after 2,5 secs.
                U must keep return a.exec(); to use timers. Its drives the eventloop :)

                Q 1 Reply Last reply 1 Jan 2017, 17:43
                0
                • M mrjj
                  1 Jan 2017, 17:40

                  @QtA_
                  Hi
                  do you now have
                  return a.exec();
                  return a.quit();

                  ?

                  it stays inside a.exec().

                  you can try
                  QTimer::singleShot(2500,&app,SLOT(quit()));
                  should kill it all after 2,5 secs.
                  U must keep return a.exec(); to use timers. Its drives the eventloop :)

                  Q Offline
                  Q Offline
                  QtA_
                  wrote on 1 Jan 2017, 17:43 last edited by
                  #11

                  @mrjj said in SplashScreen stay on TaskManager:

                  @QtA_
                  Hi
                  do you now have
                  return a.exec();
                  return a.quit();

                  ?

                  it stays inside a.exec().

                  yes

                  M 1 Reply Last reply 1 Jan 2017, 17:44
                  0
                  • Q QtA_
                    1 Jan 2017, 17:43

                    @mrjj said in SplashScreen stay on TaskManager:

                    @QtA_
                    Hi
                    do you now have
                    return a.exec();
                    return a.quit();

                    ?

                    it stays inside a.exec().

                    yes

                    M Offline
                    M Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on 1 Jan 2017, 17:44 last edited by
                    #12

                    @QtA_
                    You need to send it signal to quit.
                    Try
                    QTimer::singleShot(2500,&app,SLOT(quit()));
                    dont remove the exec() part.
                    its very important to use signals.

                    1 Reply Last reply
                    0
                    • Q Offline
                      Q Offline
                      QtA_
                      wrote on 1 Jan 2017, 17:51 last edited by
                      #13

                      nope,..:( still active.

                      #include <QApplication>
                      #include <QSplashScreen>
                      #include <QTimer>
                      
                      int main(int argc, char *argv[])
                      {
                          QApplication a(argc, argv);
                          QSplashScreen *splash=new QSplashScreen;
                          splash->setPixmap(QPixmap ("C:/Users/public/test/Logo.png"));
                          splash->show();
                          QTimer::singleShot(2500,splash,SLOT(close()));
                          QTimer::singleShot(2500,splash,SLOT(quit()));
                      
                          return a.exec();
                          return a.quit();
                      
                      }
                      
                      M 1 Reply Last reply 1 Jan 2017, 17:58
                      0
                      • Q QtA_
                        1 Jan 2017, 17:51

                        nope,..:( still active.

                        #include <QApplication>
                        #include <QSplashScreen>
                        #include <QTimer>
                        
                        int main(int argc, char *argv[])
                        {
                            QApplication a(argc, argv);
                            QSplashScreen *splash=new QSplashScreen;
                            splash->setPixmap(QPixmap ("C:/Users/public/test/Logo.png"));
                            splash->show();
                            QTimer::singleShot(2500,splash,SLOT(close()));
                            QTimer::singleShot(2500,splash,SLOT(quit()));
                        
                            return a.exec();
                            return a.quit();
                        
                        }
                        
                        M Offline
                        M Offline
                        mrjj
                        Lifetime Qt Champion
                        wrote on 1 Jan 2017, 17:58 last edited by mrjj 1 Jan 2017, 18:02
                        #14

                        @QtA_
                        You are asking it wrongly :)

                        QTimer::singleShot(2500,splash,SLOT(quit())); <<<< wrong object. should be &app

                        you are asking the timer to call quit() on splash, which splash dont have.

                        QTimer::singleShot(2500,&app,SLOT(quit()));

                        Update:
                        Also
                        The return statement will make it leave a function
                        so

                        return a.exec();
                        return a.quit(); <<< u can never, ever get here :)

                        1 Reply Last reply
                        0
                        • Q Offline
                          Q Offline
                          QtA_
                          wrote on 1 Jan 2017, 18:05 last edited by
                          #15

                          Thank you very much !! :)
                          so i've added:

                          QTimer::singleShot(2500,&a,SLOT(quit()));
                          

                          and removed

                          return a.exec();
                          

                          seem to work fine now :)

                          Question...

                          why do I need to put time delay on quit if already the time done ?
                          I mean,..

                          QTimer::singleShot(2500,&a,SLOT(quit()));
                          

                          must be

                          QTimer::singleShot(0,&a,SLOT(quit()));
                          

                          ?

                          M 1 Reply Last reply 1 Jan 2017, 18:07
                          0
                          • Q QtA_
                            1 Jan 2017, 18:05

                            Thank you very much !! :)
                            so i've added:

                            QTimer::singleShot(2500,&a,SLOT(quit()));
                            

                            and removed

                            return a.exec();
                            

                            seem to work fine now :)

                            Question...

                            why do I need to put time delay on quit if already the time done ?
                            I mean,..

                            QTimer::singleShot(2500,&a,SLOT(quit()));
                            

                            must be

                            QTimer::singleShot(0,&a,SLOT(quit()));
                            

                            ?

                            M Offline
                            M Offline
                            mrjj
                            Lifetime Qt Champion
                            wrote on 1 Jan 2017, 18:07 last edited by
                            #16

                            @QtA_
                            Hi
                            Np.

                            Does it display long enough with
                            QTimer::singleShot(0,&a,SLOT(quit())); ?

                            Then its ok.

                            1 Reply Last reply
                            0
                            • Q Offline
                              Q Offline
                              QtA_
                              wrote on 1 Jan 2017, 18:10 last edited by
                              #17

                              ok ...I've change the close by the quit.
                              instead adding a new line. :)

                              Thanks again for all your help.
                              Angie xx

                              M 1 Reply Last reply 1 Jan 2017, 18:10
                              0
                              • Q QtA_
                                1 Jan 2017, 18:10

                                ok ...I've change the close by the quit.
                                instead adding a new line. :)

                                Thanks again for all your help.
                                Angie xx

                                M Offline
                                M Offline
                                mrjj
                                Lifetime Qt Champion
                                wrote on 1 Jan 2017, 18:10 last edited by
                                #18

                                @QtA_
                                Np. Have fun programming. :)

                                1 Reply Last reply
                                0
                                • C Offline
                                  C Offline
                                  Chris Kawa
                                  Lifetime Qt Champion
                                  wrote on 1 Jan 2017, 18:30 last edited by Chris Kawa 1 Jan 2017, 18:40
                                  #19

                                  You don't need to force the app quit. It's not very flexible in the long run. By default Qt app quits automatically when a last window is closed. This is controlled in two places: on application level with setQuitOnLastWindowClosed (the default is true, so no need to change that). The other place is at the widget level with an attribute Qt::WA_QuitOnClose. This attribute is by default enabled for top level windows i.e. widgets with flag Qt::Window or Qt::Dialog except for certain types, including menus, tooltips and splashscreen.

                                  Since a splashscreen is all you have you can just turn the attribute back on:

                                  int main(int argc, char *argv[])
                                  {
                                      QApplication a(argc, argv);
                                      QSplashScreen *splash = new QSplashScreen;
                                      splash->setAttribute(Qt::WA_QuitOnClose);  // <-- the relevant line
                                      splash->setPixmap(QPixmap ("C:/Users/public/test/Logo.png"));
                                      splash->show();
                                      QTimer::singleShot(2500,splash,SLOT(close()));
                                      return a.exec();
                                  }
                                  

                                  Btw. Technically this code leaks memory as you never delete the splash instance. To keep it clean you have couple of options:

                                  • manually delete the splash after the call to exec
                                  • add WA_DeleteOnClose attribute to the splash
                                  • (the easiest and recommended) just create the splash instance on the stack:
                                  QSplashScreen splash;
                                  splash.setAttribute(Qt::WA_QuitOnClose);
                                  splash.setPixmap(QPixmap ("C:/Users/public/test/Logo.png"));
                                  splash.show();
                                  QTimer::singleShot(2500,&splash,SLOT(close()));
                                  
                                  M 1 Reply Last reply 1 Jan 2017, 18:41
                                  2
                                  • C Chris Kawa
                                    1 Jan 2017, 18:30

                                    You don't need to force the app quit. It's not very flexible in the long run. By default Qt app quits automatically when a last window is closed. This is controlled in two places: on application level with setQuitOnLastWindowClosed (the default is true, so no need to change that). The other place is at the widget level with an attribute Qt::WA_QuitOnClose. This attribute is by default enabled for top level windows i.e. widgets with flag Qt::Window or Qt::Dialog except for certain types, including menus, tooltips and splashscreen.

                                    Since a splashscreen is all you have you can just turn the attribute back on:

                                    int main(int argc, char *argv[])
                                    {
                                        QApplication a(argc, argv);
                                        QSplashScreen *splash = new QSplashScreen;
                                        splash->setAttribute(Qt::WA_QuitOnClose);  // <-- the relevant line
                                        splash->setPixmap(QPixmap ("C:/Users/public/test/Logo.png"));
                                        splash->show();
                                        QTimer::singleShot(2500,splash,SLOT(close()));
                                        return a.exec();
                                    }
                                    

                                    Btw. Technically this code leaks memory as you never delete the splash instance. To keep it clean you have couple of options:

                                    • manually delete the splash after the call to exec
                                    • add WA_DeleteOnClose attribute to the splash
                                    • (the easiest and recommended) just create the splash instance on the stack:
                                    QSplashScreen splash;
                                    splash.setAttribute(Qt::WA_QuitOnClose);
                                    splash.setPixmap(QPixmap ("C:/Users/public/test/Logo.png"));
                                    splash.show();
                                    QTimer::singleShot(2500,&splash,SLOT(close()));
                                    
                                    M Offline
                                    M Offline
                                    mrjj
                                    Lifetime Qt Champion
                                    wrote on 1 Jan 2017, 18:41 last edited by
                                    #20

                                    @Chris-Kawa
                                    Much better with WA_QuitOnClose, indeed. :)

                                    Do you know if QSplashScreen can do anything special compared to a plain QWidget in terms
                                    of her overall goal? ( sort of fancy launcher )

                                    Im not sure if a custom widget is not more fun later when she wants animations and fade in/out effects etc. Of Course she can derive from QSplashScreen but I do wonder if it
                                    give anything of benefit for this use case. ?

                                    1 Reply Last reply
                                    0
                                    • Q Offline
                                      Q Offline
                                      QtA_
                                      wrote on 1 Jan 2017, 18:50 last edited by
                                      #21

                                      Thank you guys,,...
                                      it seem to work,..

                                      however..many questions in my little brain..

                                      splash name is my variable right ?
                                      so may I redefine it many times ?

                                      #include <QApplication>
                                      #include <QSplashScreen>
                                      #include <QTimer>
                                      
                                      int main(int argc, char *argv[])
                                      {
                                          QApplication a(argc, argv);
                                          QSplashScreen *splash = new QSplashScreen;
                                          splash->setAttribute(Qt::WA_QuitOnClose);  // <-- the relevant line
                                          splash->setPixmap(QPixmap ("C:/Users/public/test/Logo.png"));
                                          splash->show();
                                          QTimer::singleShot(2500,splash,SLOT(close()));
                                          
                                          splash->setPixmap(QPixmap ("C:/Users/public/test/Logo1.png"));
                                          splash->show();
                                          QTimer::singleShot(2500,splash,SLOT(close()));
                                          
                                          return a.exec();
                                      }
                                      

                                      seem it keep always the last image...

                                      1 Reply Last reply
                                      0
                                      • C Offline
                                        C Offline
                                        Chris Kawa
                                        Lifetime Qt Champion
                                        wrote on 1 Jan 2017, 18:56 last edited by Chris Kawa 1 Jan 2017, 18:58
                                        #22

                                        @mrjj QSplashScreen is pretty basic. It's not well suited for any sort of animations. The easiest route for that would be, indeed, a plain old widget and overriding its paintEvent. Deriving from QSplashScreen would just get in your way.

                                        @QtA_ You're thinking in line, while what happens is event driven. This code QTimer::singleShot(2500,splash,SLOT(close())); doesn't "wait" for 2.5 seconds. It just schedules the slot to fire in 2.5 seconds and moves on immediately. So this:

                                        splash->setPixmap(QPixmap ("C:/Users/public/test/Logo.png"));
                                        splash->show();
                                        QTimer::singleShot(2500,splash,SLOT(close()));
                                        splash->setPixmap(QPixmap ("C:/Users/public/test/Logo1.png"));
                                        

                                        is just the same as this:

                                        splash->setPixmap(QPixmap ("C:/Users/public/test/Logo.png"));
                                        splash->setPixmap(QPixmap ("C:/Users/public/test/Logo1.png"));
                                        splash->show();
                                        QTimer::singleShot(2500,splash,SLOT(close()));
                                        

                                        To make it work like you want to you need to schedule the switch to happen some time later, e.g.

                                        splash->setPixmap(QPixmap ("C:/Users/public/test/Logo.png")); //set initial image
                                        QTimer::singleShot(1000, [&]{ splash->setPixmap(QPixmap ("C:/Users/public/test/Logo1.png")); }); //change it after a second
                                        QTimer::singleShot(2000, [&]{ splash->setPixmap(QPixmap ("C:/Users/public/test/Logo2.png")); }); //change it again after 2 seconds etc.
                                        
                                        splash->show();
                                        QTimer::singleShot(2500,splash,SLOT(close()));
                                        
                                        1 Reply Last reply
                                        2
                                        • Q Offline
                                          Q Offline
                                          QtA_
                                          wrote on 2 Jan 2017, 04:28 last edited by QtA_ 1 Feb 2017, 04:29
                                          #23

                                          ok,...that work great !
                                          my PNG animation is now done.. :) thank you.

                                          However,..there is few questions if you dont mind.
                                          is the [&] mean to execute what is in the bracket ? {}

                                          I understand what i'm doing...but I do not understand yet how, when and why to put sometime bracket, [] sometime <> sometime "" or {}
                                          i'm a little lost on when to use it..
                                          is there any tutorial who explain this syllabus ?
                                          Thanks again for all your help :)

                                          M 1 Reply Last reply 2 Jan 2017, 08:25
                                          0

                                          13/29

                                          1 Jan 2017, 17:51

                                          • Login

                                          • Login or register to search.
                                          13 out of 29
                                          • First post
                                            13/29
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved