2009-10-22 91 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 2009-10-22 13:55:38

+2

直到您的應用程序返回到事件循環,屏幕上纔會顯示它。 你可以嘗試在widget-> show()之後調用qApp-> processEvents(),但這只是一個破解,而且窗口不會重新正確地重繪(等等)。 要正確解決問題,您需要:i)使connecttoserver無阻塞或ii)在不同的線程上調用connectttoserver。 – atomice 2009-10-22 14:05:48

+0

謝謝,它現在運作良好。我會在一會兒看看線程。 – Klaus 2009-10-22 14:13:09

0

除了atomice的answer,請確保您已設置應用程序的quitOnLastWindowClosed爲false,否則你的應用程序將關閉您的登錄窗口,並打開主窗口之間終止。