Arguments' type and number agreements when used in connect
Solved
General and Desktop
-
Hi all,
Just to explore new stuff, I'd like button 2 to be disabled when button 1 is pressed and enabled when it's released.
int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget* window = new QWidget; QPushButton* button1 = new QPushButton("Button 1", window); QPushButton* button2 = new QPushButton("Button 2", window); QHBoxLayout* layout = new QHBoxLayout; layout->addWidget(button1); layout->addWidget(button2); window->setLayout(layout); QObject::connect(button1, &QPushButton::pressed, button2, &QPushButton::setDisabled); QObject::connect(button1, &QPushButton::released, button2, &QPushButton::setEnabled); window->show(); return app.exec(); }
Here it won't run due to inconsistency in the arguments number (setEnabled/Disabled takes a bool in the absence of one sent by pressed/relased).
How to solve this, if possible using QObject::connect?
-
@tomy said in Arguments' type and number agreements when used in connect:
How to solve this, if possible using QObject::connect?
By using a lambda as receiver.
-
Hi
Just in case you wonder :)QObject::connect(button1, &QPushButton::pressed, this, [button2]() { button2->setDisabled(true); }); QObject::connect(button1, &QPushButton::released, this, [button2]() { button2->setDisabled(false); });
-
Slight modification to @mrjj code, as the code example is contained inside main, which makes using this as reference pointer impossible.
QObject::connect(button1, &QPushButton::pressed, button2, [button2]()->void { button2->setDisabled(true); }); QObject::connect(button1, &QPushButton::released, button2, [button2]()->void { button2->setDisabled(false) ; });