2009-10-22 3 views
1

Я пишу окно входа в систему в Qt.Окно регистрации Qt4

Когда пользователь нажимает на кнопку OK, то следует закрыть окно входа, показать «Подключение к серверу ...» Widget и откройте главное окнокогда connecttoserver метод сделал его работа.

Однако виджет появляется только тогда, когда главное окнопоказано, и исчезает сразу же (он не должен даже близко!)

Как решить эту проблему?

void LoginWindow::blah() 
    { 
    close(); 

    QWidget widget; 
    widget.show(); 

    //calls to the "connecttoserver method" 

    Main *main = new Main(student->getInfo()[0], student->getInfo()[1], student->getInfo()[2], view); 
    main->show(); 
     } 
    } 

ответ

2

QWidget объявлен как автоматический в стеке, поэтому он уничтожается при возврате метода. Вы хотите, чтобы объявить его в куче вместо:

QWidget *widget = new QWidget(); 
widget->show(); 
+0

Спасибо, теперь окно остается открытым. Однако он все еще открывается слишком поздно. Пока метод connecttoserver загружается, окно не отображается ... – Klaus

+2

Он не будет виден на экране, пока ваше приложение не вернется в цикл событий. Вы можете попробовать вызвать qApp-> processEvents() после widget-> show(), но это просто хак, и окно не будет перерисовываться должным образом (между прочим). Чтобы решить проблему правильно, вы хотите, чтобы i) блокировать connecttoserver или ii) вызывать connectttoserver в другом потоке. – atomice

+0

Спасибо, сейчас он хорошо работает. Я буду смотреть на потоки через некоторое время. – Klaus

0

В дополнение к atomice-х answer, убедитесь, что вы установили quitOnLastWindowClosed вашего приложения к ложным, или же ваше приложение завершит между закрытием вашего окна входа и открытия главного окна ,

Смежные вопросы