QPushButton信号

QPushButton signal

我正在尝试获取 QPushButton 的操作方法 运行 执行以下操作。

我的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

对应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
}

构建失败,Clion 将包含 connect 方法的代码行标记为红色。我知道我尝试将信号连接到我的功能是错误的,我希望有人能帮助我。

问题是 QPushButton::click() 不是信号,它是执行点击的函数。

点击按钮时发出的信号是:QPushButton::clicked().

,您应该从函数内部调用QObject::connect()函数(例如在构造函数中)。在 class 声明中调用它是没有意义的。

连接调用看起来基本没问题,只是 click 不是所有可用信号的信号,因为 ; use the clicked signal from QPushButton's base class QAbstractButton instead. See also QAbstractButton Signals

此外,connect 需要在函数内部,而不是在 class 声明中。该按钮需要初始化才能使连接正常工作,因此 Login class 的构造函数似乎是一个合乎逻辑的地方,例如:

Login::Login(QWidget *parent) :
        QWidget(parent), ui(new Ui::Login) {
    ui->setupUi(this);
    QObject::connect(loginButton, &QPushButton::clicked, this, &buttonPressed);
}

从您显示的代码看来 loginButtonui 中的其他 GUI 内容是分开的,因此您可能还需要先创建该按钮,即添加 , loginButton(new QPushButton)ui(...) 之后,或者将 loginButton 移动到您的 .ui 文件...