How to link a bool variable to a push button in c++ qt?
-
I am working on a project that after clicking on a push button , some labels and lineedits that were hidden before, become unhide. After that, for the second time clicking on the pushbutton, I want to hide the labels again.
I have written the following code and used a bool variable, but nothing happened.
Here is my code:
dialog.h:
#ifndef DIALOG_H #define DIALOG_H #include <QDialog> namespace Ui { class Dialog; } class Dialog : public QDialog { Q_OBJECT public: explicit Dialog(QWidget *parent = 0); ~Dialog(); private slots: void on_pushButton_clicked(); void on_pushButton_2_clicked(); private: Ui::Dialog *ui; bool bForButton ; }; #endif // DIALOG_H
dialog.cpp:
#include "dialog.h" #include "ui_dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { bForButton = false; ui->setupUi(this); ui->label->setVisible(false); ui->label_2->setVisible(false); ui->lineEdit->setVisible(false); ui->lineEdit_2->setVisible(false); ui->label_3->setVisible(false); ui->pushButton_2->setVisible(false); } Dialog::~Dialog() { delete ui; } void Dialog::on_pushButton_clicked() { bForButton = !bForButton; ui->label->setVisible(true); ui->label_2->setVisible(true); ui->lineEdit->setVisible(true); ui->lineEdit_2->setVisible(true); ui->label_3->setVisible(true); ui->pushButton_2->setVisible(true); } void Dialog::on_pushButton_2_clicked() { double a,b,c; a = ui->lineEdit->text().toDouble(); //a=doublevalue of textbar1 b = ui->lineEdit_2->text().toDouble(); //b = doublevalue of textbar2 c=a*b; ui->label_3->setText(QString::number(c)); }
-
@nanor
Put lines likeqDebug() << "Got to this line (1)"
(you may need#include <QDebug>
at the top of your file) into youron_pushButton_clicked()
&on_pushButton_2_clicked()
slots. When you run from Qt Creator, do you see output appearing (I think it's in the "Application Output" tab at the bottom)? -
@JonB I put qDebug() << "1" into on_pushButton_clicked() and qDebug() << "2"; into on_pushButton_2_clicked() . I see outputs when I run the code.
The code works well (after clicking on the pushButton , the labels become unhide and after clicking the pushButton_2(which is related to the multiply of two numbers) it works well too).
The only part that does not work, is when I click on the pushButton for the second time to hide the labels again(When I click on the pushButton for the second time, all the labels remain, but my goal is to hide them again, but nothing happens). -
@nanor said in How to link a bool variable to a push button in c++ qt?:
When I click on the pushButton for the second time, all the labels remain, but my goal is to hide them again, but nothing happen
So look at your code in
on_pushButton_clicked()
where you callsetVisible(true)
on each widget. So why do you expect them to disappear? What could you write there instead oftrue
there to make it work as you want? -
@JonB Yes, that's right. But I wrote bForButton = !bForButton; before writing the setvisible(true) for the items in on_pushbutton_clicked(). As in the constructor I wrote bForButton = false, I thought that for the second time clicking on the pushbutton, the boolian value turns into false again and all of the elements become hide again.
-
@nanor said in How to link a bool variable to a push button in c++ qt?:
But I wrote bForButton = !bForButton
Think about how/why that then messes things up from then on, because you have changed the value of the
bForButton
value in doing so. You must not change that variable itself. Hint: it's OK to pass!bForButton
as an expression/parameter, but not to gobForButton = !bForButton
.... Or, you could choose to go down @Bob64's "current widget visibility" route, though that's more code to write/maintain. -
@Bob64 Actually I used bForButton to hide and unhide the labels by clicking on push buttons (For the first time clicking on the push_button, I want to unhide the labels, for the second time clicking on the push_button I want to hide them again, for the third time the goal is unhiding them again...).
I set bForButton=false for hiding and bForButton=!bForButton for unhiding them. -
@nanor said in How to link a bool variable to a push button in c++ qt?:
my code worked well
great, so please don't forget to mark your post as solved!