Bind Timer with a bool variable.
-
Hello. How can i bind my Timer with that bool variable. I want to hide my Button when the bool variable is false else show().
void Button::ButtonHide() { QTimer* time; time->start(2000); bool buttonTime=false; if(buttonTime==false) { this->hide(); } else { this->show(); } }
-
Hello. How can i bind my Timer with that bool variable. I want to hide my Button when the bool variable is false else show().
void Button::ButtonHide() { QTimer* time; time->start(2000); bool buttonTime=false; if(buttonTime==false) { this->hide(); } else { this->show(); } }
@thomasGl said in Bind Timer with a bool variable.:
I want to hide my Button when the bool variable is false else show().
What should this mean? Do you want to show/hide your button periodically?
If so - a class has members, so why not make buttonTime a member variable?btw: your code crashes.
-
Hello. How can i bind my Timer with that bool variable. I want to hide my Button when the bool variable is false else show().
void Button::ButtonHide() { QTimer* time; time->start(2000); bool buttonTime=false; if(buttonTime==false) { this->hide(); } else { this->show(); } }
@thomasGl
In addition to @Christian-Ehrlicher.Since there is QWidget::visible() and QWidget::setVisible(bool visible), which does the same as
show
/hide()
, if you want you do not need to keep a boolean state variable (visible()
already provides this). To toggle between shown and hidden your slot method or lambda for theQTimer
can just dothis->setVisible(!this->visible());
E.g. make the
QTimer
a class member variable andconnect(&timer, &QTimer::timeout, [this]() { this->setVisible(!this->visible()); }); timer.start(2000);
-
Now i have another Problem. I want to increase the counter, when i click the button. Is there a way to display the counter? Because qDebug does not work.
int Button::ButtonclickedXtimes() { count=0; if(this->clicked()); //does not work i need something like that. { count+=1; qDebug()<<count; } }
-
Now i have another Problem. I want to increase the counter, when i click the button. Is there a way to display the counter? Because qDebug does not work.
int Button::ButtonclickedXtimes() { count=0; if(this->clicked()); //does not work i need something like that. { count+=1; qDebug()<<count; } }
@thomasGl said in Bind Timer with a bool variable.:
Is there a way to display the counter? Because qDebug does not work.
qDebug()
does work, andqDebug()<<count;
does work. Where it displays the output is a different matter, and depends on platform.Depending on your needs to "display" this counter, you might use
qDebug()
,printf
/fprintf(stderr
or put it on a UI element such as aQLabel
. -
Did you #include <QDebug> ?
qDebug() messages should be visible in Qt Creater in the "output" tab
or external in a terminal if you set the hook "Run in terminal" in your project options. -
Hey Guys. Now i am trying to hide my label when my counter ist 5. My counter increases when i click the Button. I made a function where "this->hide(); <----"this" is my label. I am calling that function inside onother function in my Buttonclass, but the program crashes.
QObject::connect(this,SIGNAL(clicked(bool)),this,SLOT(ButtonclickedXtimes())); //i am connecting the Button with the function for counting void Button::ButtonclickedXtimes() //slot function { Label* l; count++; qDebug()<<count; if(count==5) { l->labelhide(); //here i am calling the function for the label to hide. } } /*****************Label Class********************/ Label::Label(QWidget *parent):QLabel(parent) { this->setGeometry(200,200,200,200); this->setText("Hello World"); //i want that text to hide when counter is 5 void Label::labelhide() //thats my label hide function { this->hide(); }
-
Hey Guys. Now i am trying to hide my label when my counter ist 5. My counter increases when i click the Button. I made a function where "this->hide(); <----"this" is my label. I am calling that function inside onother function in my Buttonclass, but the program crashes.
QObject::connect(this,SIGNAL(clicked(bool)),this,SLOT(ButtonclickedXtimes())); //i am connecting the Button with the function for counting void Button::ButtonclickedXtimes() //slot function { Label* l; count++; qDebug()<<count; if(count==5) { l->labelhide(); //here i am calling the function for the label to hide. } } /*****************Label Class********************/ Label::Label(QWidget *parent):QLabel(parent) { this->setGeometry(200,200,200,200); this->setText("Hello World"); //i want that text to hide when counter is 5 void Label::labelhide() //thats my label hide function { this->hide(); }
@thomasGl said in Bind Timer with a bool variable.:
but the program crashes.
Label* l; count++; qDebug()<<count; if(count==5) { l->labelhide();
I would be surprised if it would not crash.
The same as in your first post - you're using an unitialized pointer so what do you expect? -
@thomasGl said in Bind Timer with a bool variable.:
i initialized it with NULL , it crashes after 5 .
Are you kidding me?
It must be a valid pointer to your label you want to show or hide... -
@thomasGl said in Bind Timer with a bool variable.:
i initialized it with NULL , it crashes after 5 .
Are you kidding me?
It must be a valid pointer to your label you want to show or hide...@Christian-Ehrlicher Listen, at least it is initialized... ;-)
-
Hi, how do i connect that button to the slots onclicked();?
#include "twindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); QMainWindow* wind = new QMainWindow(); wind->resize(500,500); tWindow*z=new tWindow; //create Button QPushButton* butt = new QPushButton(wind); butt->setText("click"); QLabel* labb = new QLabel(wind); labb->setText("hello World"); labb->setGeometry(200,200,200,200); //QObject::connect(button,SIGNAL(clicked(bool)),&a,SLOT(quit())); QObject::connect(butt,SIGNAL(clicked(bool)),tWindow,SLOT(onClicked())); //<-----this
#include "twindow.h" tWindow::tWindow(QWidget *parent):QMainWindow(parent) { } tWindow::~tWindow() { } void tWindow::onClicked() //<----to this slot. { qDebug()<<"HELLO"; }
-
Hi, how do i connect that button to the slots onclicked();?
#include "twindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); QMainWindow* wind = new QMainWindow(); wind->resize(500,500); tWindow*z=new tWindow; //create Button QPushButton* butt = new QPushButton(wind); butt->setText("click"); QLabel* labb = new QLabel(wind); labb->setText("hello World"); labb->setGeometry(200,200,200,200); //QObject::connect(button,SIGNAL(clicked(bool)),&a,SLOT(quit())); QObject::connect(butt,SIGNAL(clicked(bool)),tWindow,SLOT(onClicked())); //<-----this
#include "twindow.h" tWindow::tWindow(QWidget *parent):QMainWindow(parent) { } tWindow::~tWindow() { } void tWindow::onClicked() //<----to this slot. { qDebug()<<"HELLO"; }
connect(butt, &QPushButton::clicked, z, &tWindow::onClicked);
Please read https://doc.qt.io/qt-6/signalsandslots.html
-
Hi, how do i connect that button to the slots onclicked();?
#include "twindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); QMainWindow* wind = new QMainWindow(); wind->resize(500,500); tWindow*z=new tWindow; //create Button QPushButton* butt = new QPushButton(wind); butt->setText("click"); QLabel* labb = new QLabel(wind); labb->setText("hello World"); labb->setGeometry(200,200,200,200); //QObject::connect(button,SIGNAL(clicked(bool)),&a,SLOT(quit())); QObject::connect(butt,SIGNAL(clicked(bool)),tWindow,SLOT(onClicked())); //<-----this
#include "twindow.h" tWindow::tWindow(QWidget *parent):QMainWindow(parent) { } tWindow::~tWindow() { } void tWindow::onClicked() //<----to this slot. { qDebug()<<"HELLO"; }
@thomasGl said in Bind Timer with a bool variable.:
QObject::connect(butt,SIGNAL(clicked(bool)),tWindow,SLOT(onClicked())); //<-----this
Please do yourself a favor and only use New Signal Slot Syntax. "Old style" with
SIGNAL
/SLOT()
macros is like a decade out of date nowadays!QObject::connect(butt, &QPushButton::clicked, tWindow, &tWindow::onClicked);
It is then optional whether you make your
tWindow::onClicked()
method take thebool
parameter --- if you don't care about the "checked" state you don't have to bother. A slot may have fewer parameters than the signal, but never more.Having said this: your error is that
tWindow
is your class (shame you start it with a lowercase letter, very confusing), your instance isz
so you will actually wantQObject::connect(butt, &QPushButton::clicked, z, &tWindow::onClicked);
-
@thomasGl said in Bind Timer with a bool variable.:
QObject::connect(butt,SIGNAL(clicked(bool)),tWindow,SLOT(onClicked())); //<-----this
Please do yourself a favor and only use New Signal Slot Syntax. "Old style" with
SIGNAL
/SLOT()
macros is like a decade out of date nowadays!QObject::connect(butt, &QPushButton::clicked, tWindow, &tWindow::onClicked);
It is then optional whether you make your
tWindow::onClicked()
method take thebool
parameter --- if you don't care about the "checked" state you don't have to bother. A slot may have fewer parameters than the signal, but never more.Having said this: your error is that
tWindow
is your class (shame you start it with a lowercase letter, very confusing), your instance isz
so you will actually wantQObject::connect(butt, &QPushButton::clicked, z, &tWindow::onClicked);
-
Because of Q_Object i am getting an error: undefined reference to vtable for lablos and error: Id returned 1 exit status. How can i fix that. I need Q_Object.
#ifndef LABLOS_H #define LABLOS_H #include <QLabel> class lablos:public QLabel { Q_OBJECT //<----because of Q_Object i am getting an error.. public: lablos(QWidget* parent); }; #endif // LABLOS_H
-
Because of Q_Object i am getting an error: undefined reference to vtable for lablos and error: Id returned 1 exit status. How can i fix that. I need Q_Object.
#ifndef LABLOS_H #define LABLOS_H #include <QLabel> class lablos:public QLabel { Q_OBJECT //<----because of Q_Object i am getting an error.. public: lablos(QWidget* parent); }; #endif // LABLOS_H