Refresh QLCDNumber



  • Hi ,
    I have a probleme with a QLCDNumber.
    When i want to refresh is value with connect in other class, nothing is appening...
    also I want to incremented his value too but i don't know how i can do that .. (like, each passage in the slot, display(value ++) )

    this is my slot who receive signal :

    void Window018703::set_lcdNumber_seatUp(int a)
    {
        int B = 1;
        ui->lcdNumber_seatUp->display(B);
    }
    

    class who call slot on push on button :

    #include "window018704.h"
    #include "ui_window018704.h"
    #include <iostream>
     
    using namespace std;
     
    Window018704::Window018704(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Window018704)
    {
        ui->setupUi(this);
        cout << " classe 704 ... " <<  endl;
     
       Window018703 *window018703 = new Window018703();
       QObject::connect(ui->pushButton_018704, &QPushButton::clicked , window018703, &Window018703::set_lcdNumber_seatUp);
     
    }
     
    Window018704::~Window018704()
    {
        delete ui;
    }
     
    void Window018704::windowView()
    {
        this->show();
    }
    

    class who countain slot receiver :

    #include "window018703.h"
    #include "ui_window018703.h"
    #include <iostream>
     
    //#define  B 1
    using namespace std;
    Window018703::Window018703(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Window018703)
    {
        ui->setupUi(this);
        //int a =5;
        cout << " nous somme avant l'appuis " <<  endl;
     
        QObject::connect(ui->pushButton, &QPushButton::clicked, this, &Window018703::set_lcdNumber_seatUp);
        cout << " nous somme apres l'appuis " <<  endl;
     
    }
     
    Window018703::~Window018703()
    {
        delete ui;
    }
     
    void Window018703::windowView()
     
    {
        this->show();
    }
     
    void Window018703::set_lcdNumber_seatUp(int a)
    {
        int B = 1;
        cout << " önt rentre ici et a vaut = " << B << endl;
        ui->lcdNumber_seatUp->display(B);
    }
    

    Thank you for your help
    Martial


  • Lifetime Qt Champion

    Hi
    One thing.
    Button click do not have parameter but you slot has
    QObject::connect(ui->pushButton_018704, &QPushButton::clicked , window018703, &Window018703::set_lcdNumber_seatUp);

    void Window018703::set_lcdNumber_seatUp(int a) <<< int a is not valid
    {
        int B = 1;
        cout << " önt rentre ici et a vaut = " << B << endl;
        ui->lcdNumber_seatUp->display(B);
    }
    
    • also I want to incremented his value too but i don't know how i can do that .. (like, each passage in the slot, display(value ++) )

    One option is to do

    void Window018703::set_lcdNumber_seatUp()
    {
     static   int B = 1;
        cout << " önt rentre ici et a vaut = " << B << endl;
        ui->lcdNumber_seatUp->display(B++);
    }
    

    that would keep raising B on each call till program ends.



  • @mrjj

    Thank you for your response, the increment work well when the connect and slot are in the same class, when I try to call this slot by an other class, this doesn't work ...


  • Lifetime Qt Champion

    @martial123
    It should work the same.
    Are you sure its the right one, you are looking at ?
    Yo create a new window here
    Window018703 *window018703 = new Window018703(); <<< new window
    QObject::connect(ui->pushButton_018704, &QPushButton::clicked , window018703, &Window018703::set_lcdNumber_seatUp);
    but you dont seem to show it so i wonder if you already made one somewhere else
    and are looking at that ?



  • @mrjj

    You are right ...
    I created a new instance but never show him with instance.show()
    because the window is already open and the instance has already been created ... so I should get this instance and call the connect on it. but how to do that?

    my window are open like this before push to connect slot display() :

    #include "window018703.h"
    #include "ui_window018703.h"
    #include <iostream>
    
    //#define  B 1
    using namespace std;
    Window018703::Window018703(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Window018703)
    {
        ui->setupUi(this);
        //int a =5;
        cout << " nous somme avant l'appuis " <<  endl;
    
        QObject::connect(ui->pushButton, &QPushButton::clicked, this, &Window018703::set_lcdNumber_seatUp);
        cout << " nous somme apres l'appuis " <<  endl;
    
    }
    
    Window018703::~Window018703()
    {
        delete ui;
    }
    
    void Window018703::windowView()
    
    {
        this->show();
    }
    
    void Window018703::set_lcdNumber_seatUp()
    {
        static int B = 0;
        cout << " önt rentre ici et a vaut = " << B << endl;
        ui->lcdNumber_seatUp->display(B++);
    }
    

    i think in windows018704 class , I have to recover this instance? :

    
    void Window018703::windowView()
    
    {
        this->show();
    }
    

    this is a slot who call by an other class when users are finished to fill in all entries...


  • Lifetime Qt Champion

    Hi
    But where do you create the first instance?
    Could you not connect it to the other window there?



  • @mrjj

    in fact, my program are composed by 3 classe :

    • a graphical class is used by users to fill fields
      when all fieds are filled,
      this class sets off this slot with this connect :
            if(this->get_m_boxGGI() == 18703)
            {
                Window018703 *window018703 = new Window018703();
                QObject::connect(ui->pushButtonOk, &QPushButton::clicked , window018703, &Window018703::windowView);
    
            }
    

    the slot :

    void Window018703::windowView()
    
    {
        this->show();
    }
    

    so after that, first class is hide() and the second class is show with this->show.
    then, the third class countain juste 1 button ( for example,
    because later it's a reception on the serial port that will declancher the incrementation of the QLCDNumber) to connect with slot who increment display ...

    so the second window is already open , so i need to recover the first instance that served to show him but i don't know how ...

    if i do that :

    void Window018703::set_lcdNumber_seatUp()
    {
        static int B = 0;
        cout << " önt rentre ici et a vaut = " << B << endl;
        this->show();
        ui->lcdNumber_seatUp->display(B++);
    }
    

    Window018703 redisplay and after that , it work ..
    but normally, window are already open so that's not quite what I want

    it is clearer ?
    Thanks a lot ...


  • Lifetime Qt Champion

    Hi
    So is
    if(this->get_m_boxGGI() == 18703)
    {
    Window018703 *window018703 = new Window018703(); << the real instance ?
    QObject::connect(ui->pushButtonOk, &QPushButton::clicked , window018703, &Window018703::windowView);

        }
    

    the only one ?
    also then its the THIRD class that needs to talk to Window018703 ?



  • @mrjj

    unless I'm wrong but yes it's the first instance
    and

    yes the third class talk to increment display ...

    the first class is hide because it just serves in start to fill variables especially : m_boxGGI ...


  • Lifetime Qt Champion

    Hi
    ok.
    Where is the code ?
    if(this->get_m_boxGGI() == 18703)
    {...
    is that in first window ?
    So if you store
    Window018703 *window018703 as a member, you can use it later to connect
    when you open the third one?



  • @mrjj yes the code is in the first class ( first window)

    how i can store in in membre ??


  • Lifetime Qt Champion

    @martial123
    and from first window, you also open the third one ? correct?
    To make it memeber.
    simply put
    Window018703 *window018703 = nullptr; in first window.h inside class
    like

    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    ......
    private:
        Ui::MainWindow *ui;
      Window018703 *window018703 = nullptr;  // also include the #include "Window018703.H" in top of file
    };
    
    

    and then change code here

    if(this->get_m_boxGGI() == 18703)
    {
    window018703 = new Window018703(); << use the one from .h
    QObject::connect(ui->pushButtonOk, &QPushButton::clicked , window018703, &Window018703::windowView);

    Then later the variable in .h (window018703 ) points to the instance.



  • @mrjj

    in fact, it is the main who show the third window but its not importante,

    i did what you told me , but i can not to catch my instance ( or member ...) like this with get methode to call him in the third classe :

    in first window .cpp :

    Window018703* get_window018703()
    {
        return window018703;
        
    }
    

    .h :

            Window018703* get_window018703();
    
    

    he tell me an error :
    use of undeclared identifier 'window018703'


  • Lifetime Qt Champion

    Hi
    Well then maybe you can connect in main ?
    You really need access to the instance and there is no magical way to get it.
    So if main know all 3 windows, you can connect there ?



  • @mrjj
    the instance is created when i do that no ? :

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

  • Lifetime Qt Champion

    @martial123
    Yes but you need that window018703 variable in third form.
    And third form is created in main ?



  • @mrjj
    yes my main show first and third window ... :

    #include <QApplication>
    #include <QtWidgets>
    #include <QLabel>
    
    #include "window1.h"
    #include "window018703.h"
    #include "window018704.h"
    
    
    using namespace std;
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
           window1 window1;
           window1.show();
    
           Window018704 window2;
           window2.show();
      
        return app.exec();
    }
    

  • Lifetime Qt Champion

    @martial123

    So connect it all up there?
    Im getting a bit confused with the names, so not sure if 04 has 03 or reverse.

    
         window1 window1;
         window1.show(); << this has window018703 ?
    
         Window018704 window2;
         connect( window1.get_window018703(), xxxx )
           
           window2.show();
      
    
    


  • @mrjj

    No ^^

    i have 3 classes :

    first : window1
    second: Window018703
    third : Window018704 ...


  • Lifetime Qt Champion

    @martial123
    well you need one place where you have the instance you want to connect.
    I not sure where Window018703 comes to life, but cant you call the get_window018703()
    on it from main to get the instance.
    It must be in window1 or window2 ? (variables)



  • @mrjj

    I do not understand much anymore..

    i have the first class (window1) wiche is call and show by main :

    window1.cpp :

    #include "window1.h"
    #include "ui_window1.h"
    #include <iostream>
    #include "window018703.h"
    #include "window018704.h"
    
    //Constructor
    window1::window1(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::window1)
    {
        //lance la construction de la fenetre
        ui->setupUi(this);
        //Signal emis
        QObject::connect(ui->pushButtonCancel, &QPushButton::clicked, qApp, &QCoreApplication::quit);
        QObject::connect(ui->pushButtonOk, &QPushButton::clicked, this, &window1::processing);
    
    }
    
    //Destructor
    window1::~window1()
    {
        delete ui;
    }
    
    //Gestion des erreurs SLOT en fonction des signaux emis
    // Range le contenu des champ dans un objet de type QString
    //Si c'est champ sont vide, alors on emet une fenetre erreur
    //Sinon, on ferme la fenetre.
    //************* Maj : Au lieu de fermer la fenetre, elle doit emmetre un signal pour ouvrir la suivante.*************
    //done  : test if on device choose by user , open the right window device.
    void window1::processing()
    {
    
        QString contents_m_fieldJob = ui->fieldJob->text();
        QString contents_m_fieldLotNumber = ui->fieldLotNumber->text();
        QString contents_m_fieldLogFile = ui->fieldLogFile->text();
        QString contents_m_fieldOperator = ui->fieldOperator->text();
        QString contents_m_boxNumberDevice = ui->boxNumberDevice->text();
        //Window018703 *obj1 = new Window018703();
        if(contents_m_fieldJob.isEmpty() || contents_m_fieldLotNumber.isEmpty() ||
          contents_m_fieldLogFile.isEmpty() || contents_m_fieldOperator.isEmpty() || contents_m_boxNumberDevice.toInt()== 0)
        {
            QMessageBox::information(this, "ERROR Message", "ERROR: Fill in all entries");
        }
        else
        {        
            QObject::connect(ui->pushButtonOk, &QPushButton::clicked , this, &QWidget::hide);
            if(this->get_m_boxGGI() == 18703)
            {
                //Window018703 *window018703 = new Window018703();
                window018703 = new Window018703();
    
                QObject::connect(ui->pushButtonOk, &QPushButton::clicked , window018703, &Window018703::windowView);
       
    
    
            }
            else if(this->get_m_boxGGI() == 18704)
            {
                Window018704 *window018704 = new Window018704();
                QObject::connect(ui->pushButtonOk, &QPushButton::clicked , window018704, &Window018704::windowView);
    
            }
        }
    
    }
    
    
    /***********************************GET***********************************/
    // Permet de recuperer les
    // utile pour le fichier de rapport
    // numero device utile pour la configuration
    // nombre de device utile pour la conf
    int window1::get_m_fieldJob() const
    {
        QString contents_m_fieldJob = ui->fieldJob->text();
        return contents_m_fieldJob.toInt();
    }
    
    int window1::get_m_fieldLotNumber() const
    {
        QString contents_m_fieldLotNumber = ui->fieldLotNumber->text();
        return contents_m_fieldLotNumber.toInt();
    }
    int window1::get_m_fieldLogFile() const
    {
        QString contents_m_fieldLogFile = ui->fieldLogFile->text();
        return contents_m_fieldLogFile.toInt();
    }
    int window1::get_m_fieldOperator() const
    {
        QString contents_m_fieldOperator = ui->fieldOperator->text();
        return contents_m_fieldOperator.toInt();
    }
    int window1::get_m_boxNombreDevice() const
    {
        QString contents_m_boxNombreDevice = ui->boxNumberDevice->text();
        return contents_m_boxNombreDevice.toInt();
    }
    
    int window1::get_m_boxGGI() const
    {
        QString contents_m_boxGGI = ui->boxGGI->currentText();
        return contents_m_boxGGI.toInt();
    }
    
    Window018703* window1::get_window018703() const
    {
        return window018703;
    
    }
    /**************************************************************************/
    

    window1.h :

    #ifndef WINDOW1_H
    #define WINDOW1_H
    #include <QWidget>
    
    #include <QDialog>
    #include <QMessageBox>
    #include <iostream>
    #include <QApplication>
    #include "window018703.h"
    #include "window018704.h"
    
    
    namespace Ui {
    class window1;
    }
    
    class window1 : public QDialog
    {
        Q_OBJECT
    
        public:
            explicit window1(QWidget *parent = nullptr);
            ~window1();
    
            /*get*/
            int get_m_fieldJob() const;
            int get_m_fieldLotNumber() const;
            int get_m_fieldLogFile() const;
            int get_m_fieldOperator() const;
            int get_m_boxNombreDevice() const;
            int get_m_boxGGI() const;
    
            Window018703* get_window018703() const;
    
            /*set*/
    
        public slots:
            void processing();
    
        private:
            Ui::window1 *ui;
            Window018703 *window018703 = nullptr;
    };
    
    #endif // WINDOW1_H
    

    main.cpp :

    #include <QApplication>
    #include <QtWidgets>
    #include <QLabel>
    
    #include "window1.h"
    #include "window018703.h"
    #include "window018704.h"
    
    
    using namespace std;
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
           window1 window1;
           window1.show();
    
          Window018704 window3;
          window3.show();
           //ui->lcdNumber_seatUp->QLCDNumber();
           //qApp->setStyleSheet("Window018703 { background-color: dark }");
           //pour rendre le bouton de tyoe QPushButton non utilisable:
           //QPushButton *bouton = new QPushButton("bouton");
           //bouton->setEnabled(false)
        return app.exec();
    }
    

    at the start of program, this main show window 1 and window3 ( window018704)

    in the first class window1, we are a slot : void window1::processing()
    in this slot if users are fill in all input, then we call slot with this connect :

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

    this connect are receive by 2 class ( window018703) :
    Window018703.cpp :

    #include "window018703.h"
    #include "ui_window018703.h"
    #include <iostream>
    
    //#define  B 1
    using namespace std;
    Window018703::Window018703(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Window018703)
    {
        ui->setupUi(this);
        //int a =5;
        cout << " nous somme avant l'appuis " <<  endl;
    
        QObject::connect(ui->pushButton, &QPushButton::clicked, this, &Window018703::set_lcdNumber_seatUp);
        cout << " nous somme apres l'appuis " <<  endl;
    
    }
    
    Window018703::~Window018703()
    {
        delete ui;
    }
    
    void Window018703::windowView()
    
    {
        this->show();
    }
    
    void Window018703::set_lcdNumber_seatUp()
    {
        static int B = 0;
        cout << " önt rentre ici et a vaut = " << B << endl;
        //this->show();
        ui->lcdNumber_seatUp->display(B++);
    }
    

    slot void Window018703::windowView() is execute and the second window are show.

    so now , if i the connect in second class is execute ( QObject::connect(ui->pushButton, &QPushButton::clicked, this, &Window018703::set_lcdNumber_seatUp);)

    the display QLCDNumber is incremented because we are on the same instance (this)

    but if i connect with the third class ( Window018704) , it doesn't work .

    i have implemented the get but i can not :

    Window018704.cpp :

    #include "window018704.h"
    #include "ui_window018704.h"
    #include <iostream>
    #include "window1.h"
    
    
    using namespace std;
    
    Window018704::Window018704(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Window018704)
    {
        ui->setupUi(this);
        cout << " classe 704 ... " <<  endl;
    
       window1 *instance1 = new window1(); ;
        Window018703 *instance3 = new Window018703();
    
       instance3 = instance1->get_window018703();
    
       QObject::connect(ui->pushButton_018704, &QPushButton::clicked , instance3, &Window018703::set_lcdNumber_seatUp);
    
    }
    
    Window018704::~Window018704()
    {
        delete ui;
    }
    
    void Window018704::windowView()
    {
        this->show();
    
    }
    

    Window018704.h :

    #ifndef WINDOW018704_H
    #define WINDOW018704_H
    
    #include <QDialog>
    #include "window018703.h"
    #include <QApplication>
    #include <QObject>
    
    namespace Ui {
    class Window018704;
    }
    
    class Window018704 : public QDialog
    {
        Q_OBJECT
    
        public:
            explicit Window018704(QWidget *parent = nullptr);
            ~Window018704();
    
        public slots:
            void windowView();
    
    private slots:
            //void on_pushButton_018704_clicked();
    
    
    private:
            Ui::Window018704 *ui;
    };
    
    #endif // WINDOW018704_H
    

    i have understand what u tell me , but i can not receve the good instance from first class ( window018703 = new Window018703(); ) to connect the good instance in the third class :

    window1 *instance1 = new window1(); ;
    Window018703 *instance3 = new Window018703();

    instance3 = instance1->get_window018703();

    QObject::connect(ui->pushButton_018704, &QPushButton::clicked , instance3, &Window018703::set_lcdNumber_seatUp);

    Thank for your time ..


  • Lifetime Qt Champion

    @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.



  • @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 ..



  • no ideas ?


  • Lifetime Qt Champion

    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.



  • 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 ...


  • Lifetime Qt Champion

    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.



  • @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



  • 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


  • Lifetime Qt Champion

    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();
    }
    


  • @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 ...


  • Lifetime Qt Champion

    @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.



  • @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 ...



  • 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


  • Lifetime Qt Champion

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



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


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.