2009-10-22 88 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,否则你的应用程序将关闭您的登录窗口,并打开主窗口之间终止。