QWizard中的异步验证

jos*_*hk0 0 qt qt4 wizard

我正在编写一个基于QWizard Qt对象的向导UI.在某种特殊情况下,我希望用户使用主机,用户名和密码登录服务.然后,向导的其余部分操纵此服务以执行各种设置任务.登录可能需要一段时间,尤其是在DNS名称需要很长时间才能解决的错误情况下 - 或者甚至可能根本无法解决.

所以我的想法是使用registerField机制强制所有三个字段,当用户点击Next时,我们在向导页面上显示一个小小的悸动,说"连接到服务器,请稍候......",同时我们尝试连接到背景.如果连接成功,我们将进入下一页.如果没有,我们会突出显示有问题的字段并要求用户重试.

但是,我对如何实现这一点感到茫然.我想到的选项:

1)覆盖validatePage并让它在后台启动一个线程.在validatePage()内输入一个等待,它将Qt事件循环泵出,直到线程结束.你认为这是最丑陋的解决方案,但......

2)隐藏真正的下一个按钮并添加一个自定义的下一个按钮,当单击该按钮时,在一个线程中调度我的长时间运行功能,并等待一个"验证完成"信号被某些东西引发.当发生这种情况时,我们手动调用QWizard :: next()(我们完全绕过了validatePage和朋友的真实验证逻辑.)这甚至更加丑陋,但将丑陋移到了可能使开发更容易的不同层次.

当然有更好的方法吗?

Cal*_*itt 5

它不具有视觉吸引力,但您可以添加连接页面,然后移动到该页面.如果连接成功,请调用next()向导,如果连接失败,请调用previous()并突出显示相应的字段.它的优点是编码相对简单.