Qt:将值从窗口传递到另一个窗口

时间:2015-05-08 18:59:33

标签: c++ qt

我有一个Qt App运行两个窗口,一个登录窗口和一个数据窗口。我需要能够从第一个到第二个传递几个值,但我无法找到一种方法,因为 - 在我的main.cpp文件中 - 我有:

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

    LoginWindow loginWindow;
    loginWindow.show();

    return a.exec();
}

我想要的是:

LoginWindow loginWindow; 
loginWindow.who();

// wait for user to input data in LoginWindow.......

// fetch datas from loginWindow

SecondWindow secondWindow; 
secondWindow.show();

因此,只要我的LoginWindow关闭(登录后),整个应用程序就会终止。另外,我无法将LoginWindow的数据提取到主函数,因为我不知道它们什么时候可用。 我怎样才能做到这一点?

感谢。

2 个答案:

答案 0 :(得分:4)

这是Qt信号和插槽的合适位置。最简单的方法 - 只需向LoginWindow类添加一个信号,向DataWindow类添加一个插槽:

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

    LoginWindow loginWindow;
    DataWindow dataWindow;

    QObject::connect(&loginWindow, SIGNAL(loginAcquired(LoginData)),
                     &dataWindow, SLOT(getLoginData(LoginData)));
    QObject::connect(&loginWindow, SIGNAL(loginAcquired(LoginData)),
                     &dataWindow, SLOT(show()));

    loginWindow.show();

    return a.exec();
}

答案 1 :(得分:3)

我会在Main()中声明一个局部变量,并通过引用将其传递给登录窗口的构造函数,即:

string username;
LoginWindow loginwindow(username);
loginwindow.show();

构造函数的声明如下:

LoginWindow::LoginWindow(string& username);

然后LoginWindow可以修改它需要的字符串,当对show()的调用返回时,用户名将存储在局部变量username中。然后,您可以以相同的方式将其传递给secondWindow的构造函数。