Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将数据从Qdialog传递到Qt中的主窗口_C++_Qt_Qt5 - Fatal编程技术网

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

C++ 将数据从Qdialog传递到Qt中的主窗口,c++,qt,qt5,C++,Qt,Qt5,成功登录后,我试图将数据从Qdialog(登录对话框)传递到我的主窗口,我想知道是否可以使用信号和插槽来实现这一点。以下是我的Main.cpp文件,我在其中将登录对话框连接到主窗口: int main(int argc, char *argv[]){ QApplication a(argc, argv); Login l; l.createConnection(); MainWindow w; l.show(); QObject::connect(

成功登录后,我试图将数据从
Qdialog
(登录对话框)传递到我的
主窗口
,我想知道是否可以使用信号和插槽来实现这一点。以下是我的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();
}
用户插入正确的用户名/密码后,对话框会发出接受信号,我希望随后将与此用户相关的信息传递到我的主窗口

我试图通过的用户类:

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

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

最好的方法是什么?

对于要在信号中使用的新类型,必须使用宏进行注册:
Q\u DECLARE\u METATYPE

user.h

#ifndef USER_H
#define USER_H

#include <QString>
#include <QMetaType>

class User
{
    [...]
};

Q_DECLARE_METATYPE(User)

#endif // USER_H
signals:
    void accept(const User & user);
public:
    void setUser(const User &user);

private:
    User mUser;
然后在必要时发布:

User user("1", "2", "3", "4", "5");
emit accept(user);
为了简化连接,您可以使用lambda函数进行连接,但为此,我们创建了一个方法,您可以在MainWindow中使用该方法:

main window.h

#ifndef USER_H
#define USER_H

#include <QString>
#include <QMetaType>

class User
{
    [...]
};

Q_DECLARE_METATYPE(User)

#endif // USER_H
signals:
    void accept(const User & user);
public:
    void setUser(const User &user);

private:
    User mUser;
main window.cpp

void MainWindow::setUser(const User& user)
{
    mUser = user;
    qDebug()<<mUser.toString();
}
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();
}

你可以在下面找到一个完整的例子。

什么是相关信息?对不起,我不太明白你的意思,如果你询问我想要传递的信息类型,它是一个包含用户名/密码等的用户类。Show User classe也许你可以在
accept
信号中添加一个参数。类似于
signals:void accept(Data Data){…}
Login
类和
QObject::connect(&l,&Loging::accept,[&](Data){w.setData(Data);w.show();})连接登录窗口和主窗口时。作为@DonaldDuck help的补充,您必须注册数据,以便将其用作信号的参数:
Q\u DECLARE\u元类型(数据)非常感谢,伙计,你是个救命恩人,这对我很有用@埃利亚内斯克