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 22.9k 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.
  • mrjjM mrjj

    @martial123
    I fear, you make new ones on the go.

    window1 *instance1 = new window1(); ;

    is that not a new instance compared to the one in main.cpp?

    Please tell from main.cpp

       window1 window1;<< this has window018703 ?
       Window018704 window2; << this has window018703 ?
    

    we should be able to connect here.

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

    @mrjj

    Hi ,

    You don't understand,
    I have 3 graphic class:

    • Window 1
    • Window 018703
    • Window 018704

    so Window1 is not Window 018703 ...
    when i do that :

    window1 window1;
           window1.show();
    

    I created instance for the first class ( not by the second class 018703)
    If I would like to created the instance of Window018703 i do :

    Window018703 window2;
          window2.show();
    

    ok ?
    so the instance we want to recover is the instance Window018703 which is created in the slot in first class ( window1) like this ":

      if(this->get_m_boxGGI() == 18703)
            {
               **window018703 = new Window018703();
    
                QObject::connect(ui->pushButtonOk, &QPushButton::clicked , window018703, &Window018703::windowView);**
    }
    

    And we want to recover this instance(window018703) in the thrid class
    so to do that, with your advices, i have created the function get_window018703() in the first class , who able to return the only one instance like this :

    Window018703* window1::get_window018703() const
    {
        return window018703;
    
    }
    

    for do that , u tell me to created the member in window1.h :

    Window018703* window1::get_window018703() const
    {
        return window018703;
    
    }
    

    so after that, in the third class ( window018704)
    I try to recover this instance to call slot increment my display ... but i can not.

    I don't want to created or recover this instance in my main because the connect are in the third class ... so I think it is necessary to recover instance ( window018703) in the third class .

    you understand or it's not clear ??

    Thank for your time, and sorry for that late response ..

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

      no ideas ?

      SGaistS 1 Reply Last reply
      0
      • 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