我有一个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的数据提取到主函数,因为我不知道它们什么时候可用。 我怎样才能做到这一点?
感谢。
答案 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
的构造函数。