将数据从Qdialog传递到Qt中的主窗口

时间:2017-12-03 18:26:57

标签: c++ qt qt5

我正在尝试在成功登录后将数据从Qdialog(登录对话框)传递到我的mainWindow,并且想知道是否可以使用信号和插槽来实现此目的。这是我的Main.cpp文件到目前为止,我将登录对话框连接到主窗口:

int main(int argc, char *argv[]){
    QApplication a(argc, argv);
    Login l;
    l.createConnection();
    MainWindow w;
    l.show();
    QObject::connect(&l, SIGNAL(accept()), &w, SLOT(show()));
    QObject::connect(&w, SIGNAL(Logout()), &l, SLOT(show()));
    return a.exec();
}

在用户插入正确的用户名/密码后,信号接受从Dialog发出,我希望之后将相对于该用户的信息传递到我的主窗口。

我尝试传递的用户类:

class User
    {
    QString ID;
    QString username;
    QString password;
    QString name;
    QString Status;

    public:
        User();
        User(QString, QString, QString, QString, QString);
        ~User();
};

最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

要在信号中使用新类型,您必须使用宏注册它:Q_DECLARE_METATYPE

<强> user.h

#ifndef USER_H
#define USER_H

#include <QString>
#include <QMetaType>

class User
{
    [...]
};

Q_DECLARE_METATYPE(User)

#endif // USER_H

然后在您的情况下将其用作接受信号的参数:

<强> login.h

signals:
    void accept(const User & user);

然后在必要时发布:

User user("1", "2", "3", "4", "5");
emit accept(user);

为简单起见,您可以使用lambda函数进行连接,但为此我们创建了一个可以在MainWindow中使用的方法:

<强> mainwindow.h

public:
    void setUser(const User &user);

private:
    User mUser;

<强> mainwindow.cpp

void MainWindow::setUser(const User& user)
{
    mUser = user;
    qDebug()<<mUser.toString();
}

<强>的main.cpp

int main(int argc, char *argv[]){
    QApplication a(argc, argv);
    Login l;
    l.createConnection();
    MainWindow w;
    l.show();
    QObject::connect(&l, &Login::accept, [&w](const User user){
        w.setUser(user);
        w.show();
    });
    QObject::connect(&w, &MainWindow::Logout, &l, &Login::show);
    return a.exec();
}

您可以在以下link中找到完整的示例。