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元类型(数据)代码>非常感谢,伙计,你是个救命恩人,这对我很有用@埃利亚内斯克