Problem lezy calkowicie gdzie indziej. Mianowicie kod wykonuje sie krok po kroku tak? To wiadomo. Wiec w funkcji add() kiedy probujesz pobrac dane logowania z widgeta nie masz pewnosci ze widget wykonal funkcje getUserInput i te dane juz ma. Rozwiazanie jest bardzo proste.
Do klasy add person dodajesz sygnal
signals:
void confirmed();
W funkcji getUserInput emitujesz sygnal po zamknieciu okna i pobraniu danych.
void addperson::getUserInput()
{
login = ui->lbLogin->text();
pass = ui->lbPass->text();
close();
emit(this->confirmed());
}
No i na koniec w funkcji add kiedy probujesz pobrac te dane do okna glownego trzeba zrobic sobie eventloop ktory poczeka na nadejscie sygnalu potwierdzenia pobrania danych.
void MainWindow::add()
{
addperson *ap = new addperson();
ap->show();
QString login, pass;
QEventLoop pause;
connect(ap,SIGNAL(confirmed()),&pause,SLOT(quit()));
pause.exec();
login = ap->getLogin();
pass = ap->getPass();
qDebug() << login;
}
Jedna uwaga jeszcze. Jesli korzystasz z Qt nie uzywaj standardowych stringow czy streamow do konwersji danych, od tego masz QString i inne klasy, ktore oferuje Qt.