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);
}
从您显示的代码看来 loginButton
与 ui
中的其他 GUI 内容是分开的,因此您可能还需要先创建该按钮,即添加 , loginButton(new QPushButton)
在 ui(...)
之后,或者将 loginButton 移动到您的 .ui 文件...
我正在尝试获取 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
不是所有可用信号的信号,因为 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);
}
从您显示的代码看来 loginButton
与 ui
中的其他 GUI 内容是分开的,因此您可能还需要先创建该按钮,即添加 , loginButton(new QPushButton)
在 ui(...)
之后,或者将 loginButton 移动到您的 .ui 文件...