我正在尝试在成功登录后将数据从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();
};
最佳方法是什么?
答案 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中找到完整的示例。