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.4k 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 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
                                        • Q QtA_
                                          2 Jan 2017, 04:28

                                          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 Offline
                                          M Offline
                                          mrjj
                                          Lifetime Qt Champion
                                          wrote on 2 Jan 2017, 08:25 last edited by mrjj 1 Feb 2017, 08:25
                                          #24

                                          @QtA_ said in SplashScreen stay on TaskManager:
                                          Hi

                                          is the [&] mean to execute what is in the bracket ? {}

                                          Yes its a c++ lambda. Think of it as "in place" function.

                                          QTimer::singleShot(1000, [&]
                                          {
                                          //this is the function body
                                          splash->setPixmap(QPixmap ("C:/Users/public/test/Logo1.png"));
                                          }
                                          );

                                          I understand what i'm doing...but I do not understand yet how, when and why to put sometime bracket, [] sometime <> sometime "" or {}

                                          Oh,  there are many different uses, depending on context.
                                          { } is often used as a block.
                                          if (something)  {
                                          // line 1
                                          // line 2
                                          } 
                                          --
                                          void somefunc() {
                                          }
                                          -----------------------
                                          [] is used with array or lists. 
                                          (and also the lambda syntax)
                                          int list[1000];
                                          int num=list[1];
                                          -----------------------
                                          The <> is often seen with templates. Templates are special c++ thing that allows any type to be used. the compiler will generate the needed code for all used types.
                                          std::vector<int> mylist; // list of ints.
                                          

                                          So its hard to fully answer as its used in many contexts. So you better just ask :)

                                          Q 1 Reply Last reply 6 Jan 2017, 03:55
                                          0

                                          14/29

                                          1 Jan 2017, 17:58

                                          • Login

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