Qt如何将Login类的邮箱数据正确传递到UserInterface类中?
问题原因
你在UserInterface类中创建的是全新的Login实例,和之前完成登录校验、存储了有效邮箱的Login实例是两个完全独立的对象,新实例的email成员没有经过赋值,自然无法返回有效数据。
解决方法
推荐通过构造函数传参的方式传递数据,实现成本最低,步骤如下:
- 修改UserInterface类的头文件定义,新增私有成员存储邮箱,同时定义带邮箱参数的构造函数:
class UserInterface : public QDialog { Q_OBJECT // 原有类定义内容保持不变 private: std::string m_loginEmail; // 存储登录传递过来的邮箱 public: // 新增带邮箱参数的构造函数 explicit UserInterface(std::string loginEmail, QWidget *parent = nullptr); };
- 实现UserInterface的带参构造函数,把传入的邮箱赋值给私有成员:
UserInterface::UserInterface(std::string loginEmail, QWidget *parent) : QDialog(parent), m_loginEmail(std::move(loginEmail)) { // 原有构造函数的初始化逻辑保持不变 }
- 修改Login类中打开UserInterface窗口的代码,把当前实例的邮箱传入构造函数:
void Login::on_loginButton_clicked() { if(isInfoValid()){ // 构造UserInterface时直接传入当前登录账号的邮箱 UserInterface userinterface(getEmailData()); userinterface.setModal(true); userinterface.exec(); } else { qDebug()<<"Login is not successful.Please check your email or password. "; } }
- 修改UserInterface的按钮点击逻辑,直接读取类内存储的邮箱即可:
void UserInterface::on_sendButton_clicked() { std::cout<<"User interface class Email data: "<<m_loginEmail<<endl; }
可选扩展方案
如果后续需要传递的参数变多,也可以选择给UserInterface加单独的setter方法传递数据,或者用Qt的信号槽机制实现跨类数据传递,效果和构造传参一致。
内容的提问来源于stack exchange,提问作者themmfa
相关产品推荐
相关产品推荐

