You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt如何将Login类的邮箱数据正确传递到UserInterface类中?

问题原因

你在UserInterface类中创建的是全新的Login实例,和之前完成登录校验、存储了有效邮箱的Login实例是两个完全独立的对象,新实例的email成员没有经过赋值,自然无法返回有效数据。

解决方法

推荐通过构造函数传参的方式传递数据,实现成本最低,步骤如下:

  1. 修改UserInterface类的头文件定义,新增私有成员存储邮箱,同时定义带邮箱参数的构造函数:
class UserInterface : public QDialog {
    Q_OBJECT
    // 原有类定义内容保持不变
private:
    std::string m_loginEmail; // 存储登录传递过来的邮箱
public:
    // 新增带邮箱参数的构造函数
    explicit UserInterface(std::string loginEmail, QWidget *parent = nullptr);
};
  1. 实现UserInterface的带参构造函数,把传入的邮箱赋值给私有成员:
UserInterface::UserInterface(std::string loginEmail, QWidget *parent) 
    : QDialog(parent), m_loginEmail(std::move(loginEmail))
{
    // 原有构造函数的初始化逻辑保持不变
}
  1. 修改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. ";
    }
}
  1. 修改UserInterface的按钮点击逻辑,直接读取类内存储的邮箱即可:
void UserInterface::on_sendButton_clicked()
{
    std::cout<<"User interface class Email data: "<<m_loginEmail<<endl;
}

可选扩展方案

如果后续需要传递的参数变多,也可以选择给UserInterface加单独的setter方法传递数据,或者用Qt的信号槽机制实现跨类数据传递,效果和构造传参一致。

内容的提问来源于stack exchange,提问作者themmfa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:06:03