我有Qt小部件应用程序,必须在用户使用该程序之前授权用户使用Web服务请求。如果用户因任何原因无法登录,我必须退出该应用程序。
.NET Framework为此实现了Load
事件:当用户看到非常时间的窗口时(此处的关键字为"用户看到"),可以显示对话框;如果对话框结果不正常,我们在主应用程序窗口调用close。
使用Qt,我们可以覆盖showEvent
。但是,它在用户真正看到主窗口之前触发。当我在showEvent
中创建对话框时,它显示没有主窗口,当我关闭showEvent
中的主窗口时,它不会关闭(因为此时不会打开)并且稍后会显示如果用户登录失败,则会发生此事件。即使在QApplication::quit()
致电后,它也会显示。
我的问题是:有没有办法获得与.NET Framework / Windows API完全相同的功能,并在用户真正看到窗口时触发事件,而不是当他"可能看到某些内容或很快就会看到& #34 ;?可以从showEvent
启动计时器以获得类似的效果,但我认为它不专业,因为你永远不知道用户计算机可能发生了什么(可能是它的CPU现在100%工作),你可以没有真正保证计时器会在正确的时刻显示对话框。
答案 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)
在应用程序启动时创建主对话框,并仅在服务响应时创建主窗口。
你真的不需要深入挖掘事件处理程序。