Rogue
Rogue

Reputation: 779

Qt : pass values from a window to another

I have a Qt App running two windows, a login window and a data window. I need to be able to pass a couple of values from the first to the second, but i can't figure out a way to do it, since - on my main.cpp file - i have :

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

    LoginWindow loginWindow;
    loginWindow.show();

    return a.exec();
}

What i'd want would be :

LoginWindow loginWindow; 
loginWindow.who();

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

// fetch datas from loginWindow

SecondWindow secondWindow; 
secondWindow.show();

So, as soon as my LoginWindow is closed (after the login), the whole app is terminated. Plus, i can't extract datas drom LoginWindow to the main function, since i don't know when they'll be available. How can i make this work ?

Thanks.

Upvotes: 1

Views: 7350

Answers (2)

Mateusz Kacprzak
Mateusz Kacprzak

Reputation: 293

That's a proper place for Qt's signals and slots. The simplest way to get going - just add one signal to LoginWindow class and one slot to DataWindow class:

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();
}

Upvotes: 5

Carlton
Carlton

Reputation: 4297

I would declare a local variable in Main() and pass it by-reference to the login window's constructor, i.e.:

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

Where the constructor is declared like this:

LoginWindow::LoginWindow(string& username);

Then LoginWindow can modify the string however it needs to, and when the call to show() returns, the user name will be stored in the local variable username. You can then pass that to the constructor of secondWindow in the same way.

Upvotes: 5

Related Questions