首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QWizard中的异步验证

QWizard中的异步验证
EN

Stack Overflow用户
提问于 2011-01-25 10:49:50
回答 2查看 1.1K关注 0票数 1

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

因此,我的想法是使用registerField机制将所有这三个字段都设置为必填字段,当用户点击下一步时,我们会在向导页面上显示一个小提示:“正在连接到服务器,请稍候...”同时我们尝试在后台进行连接。如果连接成功,我们将前进到下一页。如果没有,我们将突出显示有问题的字段,并要求用户重试。

然而,我对如何实现这一点感到困惑。我想过的选项是:

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

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

当然还有更好的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-08 02:20:59

我最后的选择是#2 (覆盖Next按钮,模拟它的行为,但手动捕获它的单击事件,并使用它做我想做的事情)。编写粘合剂来定义Next按钮的行为非常简单,而且我能够使用许多钩子将QWizardPage子类化,这样我就可以在同一页上运行我的任务,而不必切换到一个空白页并担心是前进还是后退。不过,还是要感谢Caleb的回答。

票数 0
EN

Stack Overflow用户

发布于 2011-01-26 03:38:59

它在视觉上不是很吸引人,但你可以添加一个连接页面,然后移动到那个页面。如果连接成功,则调用向导上的next(),如果连接失败,则调用previous()并突出显示相应的字段。它的优点是代码相对简单。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4789528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档