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

SplashScreen stay on TaskManager

Scheduled Pinned Locked Moved Unsolved General and Desktop
splashscreentask manager
29 Posts 3 Posters 9.7k Views
  • 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: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
                                      • M mrjj
                                        2 Jan 2017, 08:25

                                        @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 Offline
                                        Q Offline
                                        QtA_
                                        wrote on 6 Jan 2017, 03:55 last edited by QtA_ 1 Jun 2017, 03:59
                                        #25

                                        @mrjj said in SplashScreen stay on TaskManager:

                                        @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 :)

                                        Thank you very much !
                                        Not sure to understand more....but with practice...i'll figure out.. :)
                                        first,..need to learn what LAMBDA is.. lol ! :)

                                        in fact,..I use Qt beacause I thought that it had an option for dialog transparency..
                                        so by putting an image with invisible dialog will do the trick.. :( bad thinking..

                                        1 Reply Last reply
                                        0
                                        • M Offline
                                          M Offline
                                          mrjj
                                          Lifetime Qt Champion
                                          wrote on 6 Jan 2017, 07:27 last edited by
                                          #26

                                          Hi
                                          No.
                                          Well lambdas are nameless functions. Its like a normal function but has a funny syntax
                                          to be allowed to written "in place".
                                          https://blog.feabhas.com/2014/03/demystifying-c-lambdas/
                                          So where places you would use a pointer to a function, you can now directly give it the function there.

                                          .I use Qt beacause I thought that it had an option for dialog transparency.

                                          Well it does support transparency but it can vary between platforms and windows managers.
                                          :)

                                          1 Reply Last reply
                                          0

                                          16/29

                                          1 Jan 2017, 18:07

                                          • Login

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