Search code examples
c++qtclionqt6

QPushButton signal


I'm trying to get a QPushButton's action method running doing the following.

My login.h:

//
// Created by simon on 28.04.22.
//

#ifndef RESTCLIENT_LOGIN_H
#define RESTCLIENT_LOGIN_H

#include <QWidget>
#include <QPushButton>
#include <QLineEdit>


QT_BEGIN_NAMESPACE
namespace Ui { class Login; }
QT_END_NAMESPACE

class Login : public QWidget {
Q_OBJECT

QPushButton * loginButton;
QLineEdit * passwordInput;
QLineEdit * usernameInput;
QObject::connect(loginButton, &QPushButton::click, this, &buttonPressed);

public slots:
    void buttonPressed();

public:
    explicit Login(QWidget *parent = nullptr);

    ~Login() override;

private:
    Ui::Login *ui;
};


#endif //RESTCLIENT_LOGIN_H

The corresponding login.cpp:

#include "login.h"
#include "ui_Login.h"


Login::Login(QWidget *parent) :
        QWidget(parent), ui(new Ui::Login) {
    ui->setupUi(this);
}

Login::~Login() {
    delete ui;
}

void Login::buttonPressed() {
    //todo process login
}

The build fails, and Clion marks the code line containing the connect method in red. I'm aware that my attempt to connect the signal to my function is wrong, I hope someone can help me.


Solution

  • The issue is that QPushButton::click() is not a signal, it is a function that performs a click.

    The signal emitted when clicking the button is: QPushButton::clicked().

    And as already mentioned, you should call the QObject::connect() function from inside a function (in the constructor for example). It makes no sense to call it in the class declaration.