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. Hover ToolButton GIF Not Moving
QtWS25 Last Chance

Hover ToolButton GIF Not Moving

Scheduled Pinned Locked Moved General and Desktop
15 Posts 2 Posters 5.2k 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.
  • raven-worxR Offline
    raven-worxR Offline
    raven-worx
    Moderators
    wrote on last edited by
    #2

    that's unfortunately not working that easy out of the box yet.
    You would need to set the GIF to a QMovie. And connect to it's frameChanged() signal and in the slot use QMoview::currentPixmap() and set it on your tool button each time.

    --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
    If you have a question please use the forum so others can benefit from the solution in the future

    1 Reply Last reply
    0
    • W Offline
      W Offline
      wallacesoh
      wrote on last edited by
      #3

      That seems like a lot of work. I tried to do up the following but it is not working. I'm not sure if I have done it right.

      @QMovie *pixMap = new QMovie;
      pixMap->setFileName("../GIF/animated-picture.gif");
      animatedButton->setIcon(pixMap));
      connect(pixMap, SIGNAL(frameChanged()), pixMap, SLOT(QMovie::currentPixmap()));@

      1 Reply Last reply
      0
      • raven-worxR Offline
        raven-worxR Offline
        raven-worx
        Moderators
        wrote on last edited by
        #4

        no you misunderstood me.
        I was talking about something like this:
        @
        QMovie *movie = new QMovie;
        movie->setFileName("../GIF/animated-picture.gif");
        animatedButton->setIcon(movie->currentPixmap());
        connect(movie, SIGNAL(frameChanged()), this, SLOT(onFrameChanged()));

        ...

        //SLOT
        void onFrameChanged()
        {
        animatedButton->setIcon( movie->currentPixmap() );
        }
        @

        --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
        If you have a question please use the forum so others can benefit from the solution in the future

        1 Reply Last reply
        0
        • W Offline
          W Offline
          wallacesoh
          wrote on last edited by
          #5

          Thanks raven-worx. I tried your codes and there is no display on the tool button. May I know why do we need to declare twice of the following?

          @animatedButton->setIcon(movie->currentPixmap());@

          1 Reply Last reply
          0
          • raven-worxR Offline
            raven-worxR Offline
            raven-worx
            Moderators
            wrote on last edited by
            #6

            sorry... i forgot to call start() on the QMovie.

            [quote author="wallacesoh" date="1381395886"]May I know why do we need to declare twice of the following?

            @animatedButton->setIcon(movie->currentPixmap());@[/quote]

            you actually don't need it, i just did it to have an initial icon set on the tool button. But once the QMovie emits frameChanged() signal a icon will be set anyway.

            [quote author="wallacesoh" date="1381395886"]I tried your codes and there is no display on the tool button.[/quote]

            Please make sure that the path to file is valid.
            e.g. use QFile::exists(...) for a quick check.

            --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
            If you have a question please use the forum so others can benefit from the solution in the future

            1 Reply Last reply
            0
            • W Offline
              W Offline
              wallacesoh
              wrote on last edited by
              #7

              When I called start() on the QMovie, the GIF appears. However it's not moving. It's a working GIF.

              1 Reply Last reply
              0
              • raven-worxR Offline
                raven-worxR Offline
                raven-worx
                Moderators
                wrote on last edited by
                #8

                hmm... what does QMovie::isValid() return?

                --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
                If you have a question please use the forum so others can benefit from the solution in the future

                1 Reply Last reply
                0
                • W Offline
                  W Offline
                  wallacesoh
                  wrote on last edited by
                  #9

                  It is valid. The slot, onFrameChanged() is probably not being called.

                  1 Reply Last reply
                  0
                  • raven-worxR Offline
                    raven-worxR Offline
                    raven-worx
                    Moderators
                    wrote on last edited by
                    #10

                    [quote author="wallacesoh" date="1381399626"]It is valid. The slot, onFrameChanged() is probably not being called. [/quote]

                    -what does the connect statement return? If false whats the output in the console?-

                    damn it ... signal signature was wrong:
                    @
                    connect(movie, SIGNAL(frameChanged(int)), this, SLOT(onFrameChanged()));
                    @

                    --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
                    If you have a question please use the forum so others can benefit from the solution in the future

                    1 Reply Last reply
                    0
                    • W Offline
                      W Offline
                      wallacesoh
                      wrote on last edited by
                      #11

                      Great! Thanks raven-worx. :) It worked! I guess the missing int is the reason why the SLOT is not being called.

                      1 Reply Last reply
                      0
                      • W Offline
                        W Offline
                        wallacesoh
                        wrote on last edited by
                        #12

                        Sorry. I would like to ask another question. If I were to hover the tool button and display this GIF. Would it be the same?

                        My current codes are:
                        @animatedButton->setStyleSheet("QToolButton:hover { background-image: url(../GIF/animated-picture.gif"); }");@

                        But it won't animate. Is there a way to connect the signal and slot to setStyleSheet?

                        1 Reply Last reply
                        0
                        • W Offline
                          W Offline
                          wallacesoh
                          wrote on last edited by
                          #13

                          I have tried mouse events:

                          @movie->setFileName("../GIF/animated-picture.gif");
                          movie->start();
                          animatedButton->setIcon(movie->currentPixmap());
                          connect(movie, SIGNAL(frameChanged(int)), this, SLOT(onFrameChanged()));

                          void ToolBarPalettes::enterEvent(QEvent *event)
                          {
                          animatedButton->setIcon(movie->currentPixmap());
                          }

                          void ToolBarPalettes::leaveEvent(QEvent *event)
                          {
                          animatedButton->setIcon(QPixmap("../IMG/still-picture.png"));
                          }@

                          I understand that onFrameChanged() is not called. Therefore, the animation doesn't works. Is it possible to change the connect statement to cater to mouse enter events?

                          1 Reply Last reply
                          0
                          • raven-worxR Offline
                            raven-worxR Offline
                            raven-worx
                            Moderators
                            wrote on last edited by
                            #14

                            define your custom ToolButton class like this:
                            @
                            class MyAnimatedToolButton : public QToolButton
                            {
                            Q_OBJECT
                            Q_PROPERT(QString animatedIconPath READ animatedIconPath WRITE setAnimatedIconPath DESIGNABLE true )

                            public:
                            MyAnimatedToolButton(QWidget* parent = 0) : QToolButton(parent)
                            {
                            connect(&movie, SIGNAL(frameChanged()), this, SLOT(onFrameChanged()));
                            }

                             QString animatedIconPath() const
                             {
                                  return movie.filePath();
                             }
                            
                             void setAniamtedIconPath(const QString & path)
                             {
                                   movie.setFilePath(path);
                                   if( path.isEmpty() )
                                        movie.stop();
                                   else
                                         movie.start();
                             }
                            

                            protected slots:
                            void onFrameChanged()
                            {
                            this->setIcon( movie.currentPixmap() );
                            }

                            protected:
                            QMovie movie;
                            }
                            @

                            Then you can do this in your stylesheet:
                            @
                            MyAnimatedToolButton
                            {
                            qproperty-animatedIconPath: "../GIF/animated-picture.gif";
                            }

                            MyAnimatedToolButton:hover
                            {
                            qproperty-animatedIconPath: "";
                            qproperty-icon: url(../IMG/stillpicture.png");
                            }
                            @

                            This should give you an idea.

                            Or go with the event handler approach like you tried. But then take care of stopping the QMovie at the appropriate point:
                            @
                            void ToolBarPalettes::enterEvent(QEvent *event)
                            {
                            movie->start();
                            }

                            void ToolBarPalettes::leaveEvent(QEvent *event)
                            {
                            movie->stop();
                            animatedButton->setIcon(QPixmap("../IMG/still-picture.png"));
                            }
                            @

                            --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
                            If you have a question please use the forum so others can benefit from the solution in the future

                            1 Reply Last reply
                            0
                            • W Offline
                              W Offline
                              wallacesoh
                              wrote on last edited by
                              #15

                              Thanks raven-worx! For now, I am trying out the event handler method which works perfectly. I did not include @movie->stop();@ which stops the animation upon start of the application.

                              But I shall try your proposed stylesheet method as an alternative solution.

                              Thanks alot! :)

                              1 Reply Last reply
                              0

                              • Login

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