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. QTimer: Getting Started problems
Forum Updated to NodeBB v4.3 + New Features

QTimer: Getting Started problems

Scheduled Pinned Locked Moved General and Desktop
17 Posts 6 Posters 6.1k Views 1 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.
  • B Offline
    B Offline
    bodzio131
    wrote on 16 Apr 2013, 11:43 last edited by
    #2

    I'm not sure you can omit brackets for slot state_update, probably should be:
    @
    connect( timer, SIGNAL( timeout() ), this, SLOT( state_update() ) );
    @

    Instead of QTimer you could also use QDialog::startTimer and virtual QDialog::timerEvent.

    1 Reply Last reply
    0
    • S Offline
      S Offline
      SGaist
      Lifetime Qt Champion
      wrote on 16 Apr 2013, 11:43 last edited by
      #3

      Hi,

      Remove the paintEvent, you are not painting anything.

      @
      void mita_screen::state_update()
      {
      ui->label->setText(QString("%1").arg(++mita_state));
      }@

      Is enough to update the label at on your timer's time out.

      Why do you delete your ui variable in on_pushButton_clicked ? Also note, that it's already deleted in the destructor, so calling that function, then the destructor will cause a crash.

      If you want to close the dialog, connect the pushButton clicked signal on the close slot of the dialog.

      Hope it helps

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0
      • R Offline
        R Offline
        raven-worx
        Moderators
        wrote on 16 Apr 2013, 11:44 last edited by
        #4

        change your connect-statement to:
        @connect(timer, SIGNAL(timeout()), this, SLOT(state_update()));@

        Edit: nvm ... too late :)

        --- 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
        • T Offline
          T Offline
          tomma
          wrote on 16 Apr 2013, 11:44 last edited by
          #5

          You just increment mita_state but never update it to screen.
          Remove your "paintEvent":http://qt-project.org/doc/qt-4.8/qwidget.html#paintEvent implementation, which is all wrong, and update label text in state_update().

          Also your connect call in line 14 should be @connect(timer, SIGNAL(timeout()), this, SLOT(state_update()));@

          1 Reply Last reply
          0
          • S Offline
            S Offline
            sierdzio
            Moderators
            wrote on 16 Apr 2013, 11:44 last edited by
            #6

            Slot connection is probably wrong

            No need to reimplement the paint event

            This should work:
            @
            mita_screen::mita_screen(QWidget *parent) :
            QDialog(parent),
            ui(new Ui::mita_screen)
            {
            mita_screen::setWindowFlags(Qt::SplashScreen);
            ui->setupUi(this);

            mita_state = 0;     // Initialise the state machine
            
            QTimer *timer = new QTimer(this);
            connect(timer, SIGNAL(timeout()), this, SLOT(state_update()));
            timer->start(1000);
            

            }

            void mita_screen::state_update()
            {
            mita_state++;
            ui->label->setText(QString::number(mita_state));

            }
            @

            (Z(:^

            1 Reply Last reply
            0
            • S Offline
              S Offline
              sierdzio
              Moderators
              wrote on 16 Apr 2013, 11:46 last edited by
              #7

              Wow, we really flooded the poor guy :)

              (Z(:^

              1 Reply Last reply
              0
              • R Offline
                R Offline
                raven-worx
                Moderators
                wrote on 16 Apr 2013, 11:47 last edited by
                #8

                [quote author="sierdzio" date="1366112776"]Wow, we really flooded the poor guy :)[/quote]

                yep...within 3 mins ... lol

                --- 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
                • S Offline
                  S Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on 16 Apr 2013, 11:51 last edited by
                  #9

                  [quote author="sierdzio" date="1366112776"]Wow, we really flooded the poor guy :)[/quote]

                  Like one other user said, we're parallelizing :D

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  1 Reply Last reply
                  0
                  • S Offline
                    S Offline
                    sierdzio
                    Moderators
                    wrote on 16 Apr 2013, 11:53 last edited by
                    #10

                    Yeah, but it would be a tad better to spread across different threads (pun well intended :)).

                    (Z(:^

                    1 Reply Last reply
                    0
                    • J Offline
                      J Offline
                      jastmc
                      wrote on 16 Apr 2013, 12:03 last edited by
                      #11

                      Hey, don't knock it!

                      Its much better to get too many responses that none at all.

                      Thanks for all your help!

                      James

                      1 Reply Last reply
                      0
                      • J Offline
                        J Offline
                        jastmc
                        wrote on 16 Apr 2013, 13:19 last edited by
                        #12

                        SGaist said:-

                        bq. Why do you delete your ui variable in on_pushButton_clicked ? Also note, that it’s already deleted in the destructor, so calling that function, then the destructor will cause a crash.
                        If you want to close the dialog, connect the pushButton clicked signal on the close slot of the dialog.

                        I changed my code to connect the on_pushButton_clicked() signal to the ~mita_screen() slot but the button has no effect when pressed. See below.

                        Can anyone please tell me whats wrong here?

                        @#include "mita_screen.h"
                        #include "ui_mita_screen.h"

                        mita_screen::mita_screen(QWidget *parent) :
                        QDialog(parent),
                        ui(new Ui::mita_screen)
                        {
                        mita_screen::setWindowFlags(Qt::SplashScreen);
                        ui->setupUi(this);

                        mita_state = 0;     // Initialise the state machine
                        
                        QTimer *timer = new QTimer(this);
                        connect(timer, SIGNAL(timeout()), this, SLOT(state_update()));
                        timer->start(1000);
                        
                        connect(ui->pushButton, SIGNAL(on_pushButton_clicked()), this, SLOT(~mita_screen()));
                        

                        }

                        mita_screen::~mita_screen()
                        {
                        delete ui;
                        }

                        void mita_screen::state_update()
                        {
                        ui->label->setText(QString("%1").arg(++mita_state));

                        }

                        void mita_screen::on_pushButton_clicked()
                        {

                        }

                        void mita_screen::on_pushButton_pressed()
                        {

                        }
                        @

                        1 Reply Last reply
                        0
                        • S Offline
                          S Offline
                          SGaist
                          Lifetime Qt Champion
                          wrote on 16 Apr 2013, 13:22 last edited by
                          #13

                          You're connecting to the destructor:

                          1.It's not a slot
                          2.Never call a destructor, it's done for you when the object is destroyed.

                          As I said, connect to the "close slot":http://qt-project.org/doc/qt-4.8/qwidget.html#close

                          Interested in AI ? www.idiap.ch
                          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                          1 Reply Last reply
                          0
                          • R Offline
                            R Offline
                            raven-worx
                            Moderators
                            wrote on 16 Apr 2013, 13:25 last edited by
                            #14

                            you can't connect to a destructor. Since your widget is a dialog connect it to the close() slot and additionaly to the deleteLater() slot or set the "widget attribute":http://qt-project.org/doc/qt-4.8/qwidget.html#setAttribute: to Qt::WA_DeleteOnClose to let Qt delete the dialog for you.

                            --- 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
                            • J Offline
                              J Offline
                              jastmc
                              wrote on 16 Apr 2013, 14:38 last edited by
                              #15

                              Sorry, that was an older version, somehow. Thanks for your patience!
                              With this code, the button is ignored and has no effect.

                              What I meant to post was:-

                              @#include "mita_screen.h"
                              #include "ui_mita_screen.h"
                              #include <QtGui>
                              #include <QLabel>

                              mita_screen::mita_screen(QWidget *parent) :
                              QDialog(parent),
                              ui(new Ui::mita_screen)
                              {
                              mita_screen::setWindowFlags(Qt::SplashScreen);
                              ui->setupUi(this);

                              mita_state = 0;     // Initialise the state machine
                              
                              QTimer *timer = new QTimer(this);
                              connect(timer, SIGNAL(timeout()), this, SLOT(state_update()));
                              timer->start(1000);
                              
                              connect(ui->pushButton, SIGNAL(on_pushButton_clicked()), this, SLOT(mita_screen::close() ));
                              connect(ui->pushButton, SIGNAL(on_pushButton_clicked()), this, SLOT(mita_screen::deleteLater() ));
                              

                              }

                              mita_screen::~mita_screen()
                              {
                              delete ui;
                              }

                              void mita_screen::state_update()
                              {
                              static int counter=0;

                              ui->label->setText(QString("%1").arg(++mita_state));
                              

                              }

                              void mita_screen::on_pushButton_clicked()
                              {

                              }

                              void mita_screen::on_pushButton_pressed()
                              {

                              }
                              @

                              1 Reply Last reply
                              0
                              • S Offline
                                S Offline
                                sierdzio
                                Moderators
                                wrote on 16 Apr 2013, 14:46 last edited by
                                #16

                                In your connect statement:

                                Not:
                                @
                                SLOT(mita_screen::close())
                                @

                                Instead:
                                @
                                SLOT(close())
                                @

                                (Z(:^

                                1 Reply Last reply
                                0
                                • S Offline
                                  S Offline
                                  SGaist
                                  Lifetime Qt Champion
                                  wrote on 16 Apr 2013, 14:47 last edited by
                                  #17

                                  on_pushButton_clicked is a slot.

                                  Try this:
                                  @
                                  connect(ui->pushButton, SIGNAL(clicked()), SLOT(close()));
                                  @

                                  Have a look at the "signal/slot":http://qt-project.org/doc/qt-4.8/signalsandslots.html and the "designer":http://qt-project.org/doc/qt-4.8/designer-manual.html documentation to have a better understanding of how it works

                                  Interested in AI ? www.idiap.ch
                                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                  1 Reply Last reply
                                  0

                                  11/17

                                  16 Apr 2013, 12:03

                                  • Login

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