2009-10-22 4 views
1

로그인 윈도우을 Qt로 작성했습니다.Qt4 로그인 윈도우

는 사용자가 OK를 클릭하면 위젯 "서버 ... 연결"는 을 쇼, 로그인 창을 닫아야하고, 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

응용 프로그램이 이벤트 루프로 돌아 오기 전까지는 화면에 표시되지 않습니다. 위젯 -> show() 후에 qApp-> processEvents()를 호출 해 볼 수는 있지만 이것은 단지 해킹 일 뿐이며 윈도우는 다른 것들 중에서 적절히 다시 칠하지 않을 것이다. 문제를 올바르게 해결하려면 i) connecttoserver를 non-blocking으로 만들거나 ii) connectttoserver를 다른 스레드에서 호출하고 싶습니다. – atomice

+0

고마워요, 지금 잘 작동합니다. 나는 잠시 동안 실을 보게 될 것이다. – Klaus

0

atomice의 answer뿐만 아니라, 확인 false로 응용 프로그램의 quitOnLastWindowClosed를 설정하거나 다른 응용 프로그램이 로그인 창을 닫고 메인 창을 열어 사이에 종료됩니다 .