[英]How can I change a class element via QLineEdit in QT?
我是 QT 的新手,正在尝试练习。 它涉及信号和插槽。 我将进入正题。 我有一个用户类:(User.h)
class User : public QObject
{
Q_OBJECT
public:
static int counter;
explicit User(QObject *parent = nullptr);
~User();
QString getName();
QString getPassword();
int getAge();
public slots:
void setName(QString name);
void setPassword(QString password);
void setAge(int age);
protected:
QString name_;
QString password_;
int *id_;
int age_;
};
#include "User.h"
User::User(QObject* parent) :
QObject(parent)
{
counter++;
id_ = new int(counter);
}
User::~User()
{
delete id_;
}
QString User::getName()
{
return name_;
}
QString User::getPassword()
{
return password_;
}
int User::getAge()
{
return age_;
}
void User::setName(QString name) {
name_ = name;
}
void User::setPassword(QString password) {
password_ = password;
}
void User::setAge(int age) {
age_ = age;
}
int User::counter = 0;
好吧,通过QLineEdit(输入的行),你需要改变类中元素的状态(name_,password_,age_。好吧,我将给QtWidgetsAppilication类的头部剥皮:
#pragma once
#include <QtWidgets/QMainWindow>
#include <qmessagebox.h>
#include "ui_QtWidgetsApplication.h"
#include "User.h"
class QtWidgetsApplication : public QMainWindow
{
Q_OBJECT
public:
QtWidgetsApplication(QWidget *parent = Q_NULLPTR);
void inputUser();
public slots:
void inputUserName();
void inputPassword();
private:
Ui::QtWidgetsApplicationClass ui;
User user;
};
(知道 * User user * 是个坏主意)cpp:
#include "QtWidgetsApplication.h"
QtWidgetsApplication::QtWidgetsApplication(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
connect(ui.input, &QPushButton::clicked, this, &QtWidgetsApplication::inputUser);
connect(ui.login, &QLineEdit::text, this, &QtWidgetsApplication::inputUserName);
connect(ui.password, &QLineEdit::text, this, &QtWidgetsApplication::inputPassword);
}
void QtWidgetsApplication::inputUserName()
{
QObject::connect(ui.login, &QLineEdit::textChanged, &user, &User::setName);
}
void QtWidgetsApplication::inputPassword()
{
QObject::connect(ui.password, &QLineEdit::textChanged, &user, &User::setPassword);
}
void QtWidgetsApplication::inputUser()
{
if (user.getName() == "John" && user.getPassword() == "1234") {
QMessageBox::information(this, "Programm", "You are our employee!");
}
else {
QMessageBox::warning(this, "Program", "ERROR!");
}
}
我阅读了有关信号和插槽的信息,并使用了以下语法:
QObject::connect(ui.password, &QLineEdit::textChanged, &user, &User::setPassword);
然而,值对我来说并没有改变,而是来检查,然后编译器看到垃圾而不是值并在不满足条件时发出“错误”。 如何纠正这个问题?
connect(ui.login, &QLineEdit::text, this, &QtWidgetsApplication::inputUserName);
connect(ui.password, &QLineEdit::text, this, &QtWidgetsApplication::inputPassword);
首先,文本不是 QLineEdit 的信号。
QObject::connect(ui.login, &QLineEdit::textChanged, &user, &User::setName);
void setName(QString name);
void setPassword(QString password);
其次,函数setName的参数类型不能是QString,应该是const QString&,因为textChanged的参数类型是const QString&。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.