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. Refresh QLCDNumber
Qt 6.11 is out! See what's new in the release blog

Refresh QLCDNumber

Scheduled Pinned Locked Moved Solved General and Desktop
36 Posts 3 Posters 13.3k 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.
  • martial123M martial123

    no ideas ?

    SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #25

    Hi,

    @martial123 said in Refresh QLCDNumber:

    no ideas ?

    Please show some patience and allow 24 hours to pass before bumping your own thread. People answering here do it on their own time and may not live in the same time zone as you.

    As for your problem, currently your code is pretty convoluted.

    Can you describe what your application is doing and the responsibility of the various widget ?
    Also, please, give your class more meaningful names. Windows1, Window018703 and Window018704 doesn't really help at all understanding the relation between your widgets.

    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
    2
    • martial123M Offline
      martial123M Offline
      martial123
      wrote on last edited by
      #26

      I have just write no idea lol
      So I explain again

      i have 3 classe .JUST 3.

      Each class corresponds to a graphical interface.
      So we have 3 Interface Graphical.

      1 er interface
      the first class is instantiated in the main.cpp
      the first class correspond to a graphical interface. it serves to collect information write by user and store that in variables.
      When all variable are full, this interface emit signal to connect with a slot in the second class

      2 eme interface
      The second interface are the main window, the main application
      This second interface are called by the first. Is own slot allows to show this interface.
      This second interface contain a lots of widgets, but in this topic, QLCDNumber are important.
      This interface allows to incremented many QLCDNumber.
      To do that, it has a slot who able to incremented QLCDNumber.

      3 eme interface
      The last class is composed with 1 widget (QPushButton) .
      When user click on this button, the slot in interface 2 is called by connect to incremente value of QLCDNumber.

      It's just that.

      The main problem,
      how to recover an instance in another class from the one that created it ?
      Because if i use an other intance to call the slot in interface2 , My QLCDNumber doesn't refresh because it's not the same instance .. That is the problem.

      Ty for time.I can not be more explicit ...

      1 Reply Last reply
      0
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #27

        So you are currently doing thing in the wrong sense and order.

        The 3rd widget with its push button should not know anything about the second. From the looks of it, it should be instantiated and connected in the main function. Or alternatively be a member variable of your MainWindow class and be connect by the MainWindow itself.

        As for your first widget, since it's a dialog, do you need to call it only once at the start of your application of multiple times ?

        In any case, you can call it from within your MainWindow and handle its content there.

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

        martial123M 1 Reply Last reply
        2
        • SGaistS SGaist

          So you are currently doing thing in the wrong sense and order.

          The 3rd widget with its push button should not know anything about the second. From the looks of it, it should be instantiated and connected in the main function. Or alternatively be a member variable of your MainWindow class and be connect by the MainWindow itself.

          As for your first widget, since it's a dialog, do you need to call it only once at the start of your application of multiple times ?

          In any case, you can call it from within your MainWindow and handle its content there.

          martial123M Offline
          martial123M Offline
          martial123
          wrote on last edited by
          #28

          @SGaist

          hi

          With COUT, I see i can not recover the my instance with my get...
          It tell me : QObject::connect: invalid null parameter
          l'instance retournée est : 0000000000000000

          But when i set my instance, i have a good value on my member variable...
          My get doesn't work ..

          To remember my problem, i created the instance for my second class and i would like to change value of QLCDNumber by an other class, so i created connect in the third class but this connect must be point on the same instance, so with get we could like success this ...

          my variable membre in the first class :

           private:
                  Ui::window1 *ui;
                  /*Always declare a pointer with 0 as address*/
                  Window018703 *m_window018703 = nullptr;
          

          my instance created in first class we want to recover :

                      m_window018703 = new Window018703();
                      this->set_window018703(m_window018703);
                      QObject::connect(ui->pushButtonOk, &QPushButton::clicked , m_window018703, &Window018703::windowView);
          
          

          the set and get in my first class :

          Window018703* window1::get_window018703() const
          {
              cout <<" l'instance retournée est   : " << m_window018703 << endl;
              return m_window018703;
          }
          /**************************************************************************/
          
          void window1::set_window018703(Window018703 *window018703)
          {
              cout <<" object depart set est  : " << window018703 << endl;
              m_window018703 = window018703;
              cout <<" object arriver set est  : " << m_window018703 << endl;
          }
          

          and in my third class, i try to get this instance but it his value is null ... :

          void Window018704::acces()
          {
              window1 *instance1 = new window1(); ;
              Window018703 *instance3 = new Window018703();
              instance3 = instance1->get_window018703();
              cout<<"voici l'instance retourné : "<< instance3<< endl;
              QObject::connect(ui->pushButton_018704, &QPushButton::clicked , instance3, &Window018703::set_lcdNumber_seatUp);
          }
          

          erreur : QObject::connect: invalid null parameter
          but when i cout my set, i have value .. :
          object depart set est : 000001B0C0B90DA0
          object arriver set est : 000001B0C0B90DA0

          1 Reply Last reply
          0
          • martial123M Offline
            martial123M Offline
            martial123
            wrote on last edited by martial123
            #29

            i have understand, when i do that :
            window1 *instance1 = new window1(); ;
            i re-created an instance and my member variable reset at null ptr ...

            edit :
            I still do not know how to avoid that

            1 Reply Last reply
            1
            • mrjjM Offline
              mrjjM Offline
              mrjj
              Lifetime Qt Champion
              wrote on last edited by
              #30

              Hi
              Yes, the error is that you create a new window1 instance.
              And it never created a Window018703 as it is the other one.
              You need the instance from main.
              However, since this has caused tons of issues. i wonder if we could do it another way.
              Using signals to show/hide the Window018703 created in MAIN so we get around the issue.
              if you define 2 new SIGNALS in window1.
              like
              signals:
              void ShowSecond();
              void HideSecond();
              and then did

              int main(int argc, char *argv[])
              {
                  QApplication app(argc, argv);
              
                  window018703 TheWindow018703(); // new. the one you normally create in win1
                  TheWindow018703.hide(); // dont show yet
                  window1 window1; // add new signals to this 
                // hook new signal to TheWindow018703 show so we can emit ShowSecond and it will show
                  connect(&window1,  window1::ShowSecond, &TheWindow018703::show );
                  window1.show(); // show win1 but in slot DO NOT create new window018703 but call emit 
                  ShowSecond to show instance from main.
              
                    Window018704 window3;
                    connect( window3, xxxx , &TheWindow018703, xxxx) // connect lcd thing here
                    window3.show();
                 
                  return app.exec();
              }
              
              martial123M 1 Reply Last reply
              1
              • mrjjM mrjj

                Hi
                Yes, the error is that you create a new window1 instance.
                And it never created a Window018703 as it is the other one.
                You need the instance from main.
                However, since this has caused tons of issues. i wonder if we could do it another way.
                Using signals to show/hide the Window018703 created in MAIN so we get around the issue.
                if you define 2 new SIGNALS in window1.
                like
                signals:
                void ShowSecond();
                void HideSecond();
                and then did

                int main(int argc, char *argv[])
                {
                    QApplication app(argc, argv);
                
                    window018703 TheWindow018703(); // new. the one you normally create in win1
                    TheWindow018703.hide(); // dont show yet
                    window1 window1; // add new signals to this 
                  // hook new signal to TheWindow018703 show so we can emit ShowSecond and it will show
                    connect(&window1,  window1::ShowSecond, &TheWindow018703::show );
                    window1.show(); // show win1 but in slot DO NOT create new window018703 but call emit 
                    ShowSecond to show instance from main.
                
                      Window018704 window3;
                      connect( window3, xxxx , &TheWindow018703, xxxx) // connect lcd thing here
                      window3.show();
                   
                    return app.exec();
                }
                
                martial123M Offline
                martial123M Offline
                martial123
                wrote on last edited by
                #31

                @mrjj
                Hi
                Ty!

                But i don't understand all ..

                window018703 TheWindow018703(); // new. the one you normally create in win1
                

                what is that ?? in my computer, this is doesn't work.
                i think you would like do this :

                Window018703 o_window018703;
                        o_window018703.hide();
                

                secondly for me there missing 1 thing is this connect :

                connect(&window1,  window1::ShowSecond, &TheWindow018703::show );
                

                and : &TheWindow018703::show make mistake...

                i have created 2 signals in first window1 but in slot i emit Showsecond(), but HideSecond() are usfull for what ?

                And for the LCD, it incremente by push on QPushButton so i don't understand this :
                Window018704 window3;
                connect( window3, xxxx , &TheWindow018703, xxxx) // connect lcd thing here
                window3.show();

                thinks a lot ...

                mrjjM 1 Reply Last reply
                0
                • martial123M martial123

                  @mrjj
                  Hi
                  Ty!

                  But i don't understand all ..

                  window018703 TheWindow018703(); // new. the one you normally create in win1
                  

                  what is that ?? in my computer, this is doesn't work.
                  i think you would like do this :

                  Window018703 o_window018703;
                          o_window018703.hide();
                  

                  secondly for me there missing 1 thing is this connect :

                  connect(&window1,  window1::ShowSecond, &TheWindow018703::show );
                  

                  and : &TheWindow018703::show make mistake...

                  i have created 2 signals in first window1 but in slot i emit Showsecond(), but HideSecond() are usfull for what ?

                  And for the LCD, it incremente by push on QPushButton so i don't understand this :
                  Window018704 window3;
                  connect( window3, xxxx , &TheWindow018703, xxxx) // connect lcd thing here
                  window3.show();

                  thinks a lot ...

                  mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on last edited by
                  #32

                  @martial123
                  Yep, small typos.
                  Didn't have a compiler at hand :)
                  yes i mean.
                  Window018703 o_window018703;

                  The connect is wrong. i used the name of var , not class name. (as it should)
                  connect(&window1, window1::ShowSecond, &Window018703 ::show );

                  HideSecond signal was just in case you wanted to hide it again. if you don't need that , you can skip it.

                  • And for the LCD, it incremente by push on QPushButton so i don't understand this :

                  well i was not sure what signal you use for that. but now mains know all of the classes so
                  you can use anything you like. all instances are in same place.

                  martial123M 1 Reply Last reply
                  1
                  • mrjjM mrjj

                    @martial123
                    Yep, small typos.
                    Didn't have a compiler at hand :)
                    yes i mean.
                    Window018703 o_window018703;

                    The connect is wrong. i used the name of var , not class name. (as it should)
                    connect(&window1, window1::ShowSecond, &Window018703 ::show );

                    HideSecond signal was just in case you wanted to hide it again. if you don't need that , you can skip it.

                    • And for the LCD, it incremente by push on QPushButton so i don't understand this :

                    well i was not sure what signal you use for that. but now mains know all of the classes so
                    you can use anything you like. all instances are in same place.

                    martial123M Offline
                    martial123M Offline
                    martial123
                    wrote on last edited by martial123
                    #33

                    @mrjj
                    hi

                    Connect must have 4 argument no ??
                    i do that :

                       QObject::connect(&o_window1, &window1::ShowSecond, &Window018703::show );
                    

                    And i have no error but window018703 are not show when signal ShowSecond is emit.

                    If i do that :

                       QObject::connect(&o_window1, &window1::ShowSecond, &Window018703::windowView );
                    

                    i replace &Window018703::show by &Window018703::windowView ( windowView is my slot to show window018703. When i do that, he tell me errors :

                    C:\Qt\5.11.2\msvc2017_64\include\QtCore\qobject.h:262: error: C2665: 'QObject::connect': none of the 4 overloads could convert all the argument types

                    and for the third window, i do that :

                    but error :

                    Window018704 o_window018704;
                           //connect( window3, xxxx , &TheWindow018703, xxxx) // connect lcd thing here
                           QObject::connect(ui->pushButton_018704, &QPushButton::clicked , o_window018703, &Window018703::set_lcdNumber_seatUp);
                           o_window018704.show();
                    

                    he don't know ui ...

                    edit []
                    I have succeeded to connect signal to show my second class in add a 4 argument :

                    using namespace std;
                    int main(int argc, char *argv[])
                    {
                        QApplication app(argc, argv);
                            Window018703 o_window018703;
                            o_window018703.hide();
                    
                    
                           window1 o_window1;
                           **QObject::connect(&o_window1, &window1::ShowSecond, &o_window018703, &Window01870~~3::windowView);**
                           o_window1.show();
                    
                           Window018704 o_window018704;
                           //connect( window3, xxxx , &TheWindow018703, xxxx) // connect lcd thing here
                          // QObject::connect(ui->pushButton_018704, &QPushButton::clicked , o_window018703, &Window018703::set_lcdNumber_seatUp);
                           //o_window018704.show();
                    
                    
                        return app.exec();
                    }
                    

                    now, i work on the third class ...

                    1 Reply Last reply
                    0
                    • martial123M Offline
                      martial123M Offline
                      martial123
                      wrote on last edited by
                      #34

                      I HAVE DONE THIIIIIIISSS

                      Its work !!!! A Hundred TY !!!

                      My main now :

                      using namespace std;
                      int main(int argc, char *argv[])
                      {
                          QApplication app(argc, argv);
                              Window018703 o_window018703;
                              o_window018703.hide();
                              Window018704 o_window018704;
                              o_window018704.hide();
                      
                      
                             window1 o_window1;
                             QObject::connect(&o_window1, &window1::ShowSecond, &o_window018703, &Window018703::windowView);
                             QObject::connect(&o_window1, &window1::ShowThrid, &o_window018704, &Window018704::windowView);
                             o_window1.show();
                      
                             QObject::connect(&o_window018704, &Window018704::incremente , &o_window018703, &Window018703::set_lcdNumber_seatUp);
                      
                      
                          return app.exec();
                      }
                      

                      by my third class, the signal emit is : &Window018704::incremente.
                      it is emit in slot who dechanche by that :

                          QObject::connect(ui->pushButton_018704, &QPushButton::clicked , this, &Window018704::acces);
                      

                      and the slot :

                      void Window018704::acces()
                      {
                          emit incremente();
                      }
                      

                      So its work well !!
                      ty for all of your time peoples!

                      I marque down solved, and i indicate wich comment has help me .
                      See you

                      1 Reply Last reply
                      1
                      • mrjjM Offline
                        mrjjM Offline
                        mrjj
                        Lifetime Qt Champion
                        wrote on last edited by
                        #35

                        Hi
                        Super. Good work.!
                        So now you have learned one of the top questions there.
                        How to use Window X from Window Y :)

                        martial123M 1 Reply Last reply
                        1
                        • mrjjM mrjj

                          Hi
                          Super. Good work.!
                          So now you have learned one of the top questions there.
                          How to use Window X from Window Y :)

                          martial123M Offline
                          martial123M Offline
                          martial123
                          wrote on last edited by
                          #36

                          @mrjj
                          Yes ! Thank's !
                          In future, i will probably have other questions, I would be sure to ask you :)
                          good day !

                          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