如何在Qt小部件应用程序中第一次显示主窗口时显示对话框?

时间:2015-12-18 08:59:14

标签: c++ qt

我有Qt小部件应用程序,必须在用户使用该程序之前授权用户使用Web服务请求。如果用户因任何原因无法登录,我必须退出该应用程序。

.NET Framework为此实现了Load事件:当用户看到非常时间的窗口时(此处的关键字为"用户看到"),可以显示对话框;如果对话框结果不正常,我们在主应用程序窗口调用close。

使用Qt,我们可以覆盖showEvent。但是,它在用户真正看到主窗口之前触发。当我在showEvent中创建对话框时,它显示没有主窗口,当我关闭showEvent中的主窗口时,它不会关闭(因为此时不会打开)并且稍后会显示如果用户登录失败,则会发生此事件。即使在QApplication::quit()致电后,它也会显示。

我的问题是:有没有办法获得与.NET Framework / Windows API完全相同的功能,并在用户真正看到窗口时触发事件,而不是当他"可能看到某些内容或很快就会看到& #34 ;?可以从showEvent启动计时器以获得类似的效果,但我认为它不专业,因为你永远不知道用户计算机可能发生了什么(可能是它的CPU现在100%工作),你可以没有真正保证计时器会在正确的时刻显示对话框。

3 个答案:

答案 0 :(得分:1)

我会尝试创建MainWindow并隐藏()它是默认的。启动时显示的唯一小部件应该是Login-Dialog。我将连接成功登录与QMainWindow的show()插槽和登录失败 - 与应用程序的退出插槽。

答案 1 :(得分:1)

我通常在main.cpp中执行类似的操作:

int main(int argc, char* argv[])
{
    QApplication a(argc, argv);
    LoginDialog dialog;
    if(!dialog.exec()){
        return 1;
    }
    MainWindow w;
    w.show();
    return a.exec();
}

LoginDialog定义为从QDialog继承,MainWindow定义为从QMainWindow继承之后(当然)。

答案 2 :(得分:0)

在应用程序启动时创建主对话框,并仅在服务响应时创建主窗口。

你真的不需要深入挖掘事件处理程序。