繁体   English   中英

如何通过 QT 中的 QLineEdit 更改类元素?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM