Solved Refresh QLCDNumber
-
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.
-
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 ...
-
@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 ? -
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...
-
Hi
But where do you create the first instance?
Could you not connect it to the other window there? -
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 wantit is clearer ?
Thanks a lot ... - a graphical class is used by users to fill fields
-
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 ? -
unless I'm wrong but yes it's the first instance
andyes the third class talk to increment display ...
the first class is hide because it just serves in start to fill variables especially : m_boxGGI ...
-
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 ??
-
@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
likeclass 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.
-
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' -
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); }
-
@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(); }
-
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();
-
-
@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) -
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 ..