QDialog类,如何使exec以非模态运行!

jiamianshiye 2013-08-21 02:05:07
本人写了一个登录界面程序,点击LIneEdit时会弹出软键盘,如果dialog模态运行的话,就会使键盘无效,无法点击。但是,dialog 非模态 运行的话,该如何判断 登录成功或是失败!!
我想过重载exec函数,但是看了源码以后发现。。。。看不懂。。。

请大神给点思路
...全文
525 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiamianshiye 2013-08-24
  • 打赏
  • 举报
回复
引用 10 楼 jiangcaiyang123 的回复:
[quote=引用 8 楼 jiamianshiye_16_com 的回复:] [quote=引用 7 楼 jiangcaiyang123 的回复:] 四步。 1、设置属性,让其关闭即删除 QDialog::setAttribute( Qt::WA_DeleteOnClose ); 2、设置非模态 QDialog::setModal( false ); 3、使用指针 4、想关闭对话框并且销毁它直接点击关闭按钮或者调用QDialog::close()槽即可。
那个,我若用exec的话,exec内部会将dialog模态,代码如下
    bool wasShowModal = testAttribute(Qt::WA_ShowModal);
    setAttribute(Qt::WA_ShowModal, true);
    setResult(0);
这是从Dialog.exec()函数内部复制的代码。所以你的方法适合。[/quote] 对了,不要使用exec(),使用show()。[/quote] 问题已解决,查看9楼。 解决 exec非模态问题,当自定义show函数时,可以使用以下代码: QEventLoop loop; this->show(); connect(this,SIGNAL(accepted()),&loop,SLOT(quit())); loop.exec(QEventLoop::DialogExec); //进入事件 循环处理,阻塞 int res = this->result(); return res; 此段代码可以保证dialog进行阻塞,并且有返回值。返回值乃是当前中断事件循环的事件。 res的值是:Accepted或者rejceted。
彩阳 2013-08-23
  • 打赏
  • 举报
回复
引用 8 楼 jiamianshiye_16_com 的回复:
[quote=引用 7 楼 jiangcaiyang123 的回复:] 四步。 1、设置属性,让其关闭即删除 QDialog::setAttribute( Qt::WA_DeleteOnClose ); 2、设置非模态 QDialog::setModal( false ); 3、使用指针 4、想关闭对话框并且销毁它直接点击关闭按钮或者调用QDialog::close()槽即可。
那个,我若用exec的话,exec内部会将dialog模态,代码如下
    bool wasShowModal = testAttribute(Qt::WA_ShowModal);
    setAttribute(Qt::WA_ShowModal, true);
    setResult(0);
这是从Dialog.exec()函数内部复制的代码。所以你的方法适合。[/quote] 对了,不要使用exec(),使用show()。
jiamianshiye 2013-08-23
  • 打赏
  • 举报
回复
解决 exec非模态问题,当自定义show函数时,可以使用以下代码: QEventLoop loop; this->show(); connect(this,SIGNAL(accepted()),&loop,SLOT(quit())); loop.exec(QEventLoop::DialogExec); //进入事件 循环处理,阻塞 int res = this->result(); return res; 此段代码可以保证dialog进行阻塞,并且有返回值。返回值乃是当前中断事件循环的事件。 res的值是:Accepted或者rejceted。
jiamianshiye 2013-08-23
  • 打赏
  • 举报
回复
引用 7 楼 jiangcaiyang123 的回复:
四步。 1、设置属性,让其关闭即删除 QDialog::setAttribute( Qt::WA_DeleteOnClose ); 2、设置非模态 QDialog::setModal( false ); 3、使用指针 4、想关闭对话框并且销毁它直接点击关闭按钮或者调用QDialog::close()槽即可。
那个,我若用exec的话,exec内部会将dialog模态,代码如下
    bool wasShowModal = testAttribute(Qt::WA_ShowModal);
    setAttribute(Qt::WA_ShowModal, true);
    setResult(0);
这是从Dialog.exec()函数内部复制的代码。所以你的方法适合。
彩阳 2013-08-21
  • 打赏
  • 举报
回复
四步。 1、设置属性,让其关闭即删除 QDialog::setAttribute( Qt::WA_DeleteOnClose ); 2、设置非模态 QDialog::setModal( false ); 3、使用指针 4、想关闭对话框并且销毁它直接点击关闭按钮或者调用QDialog::close()槽即可。
jiamianshiye 2013-08-21
  • 打赏
  • 举报
回复
引用 4 楼 accsoar 的回复:
你可以用show(),然后把Ok按钮和cancel按钮的clicked信号关联到两个槽函数,分别处理点击ok和cancle的后续动作,这个对话框不要作为局部变量,而是作为成员变量,在OK对应的槽函数里: QString name = dlg.getName(); Qstring pw = dlg.getPassword(); //处理登录账号密码 这是满足你需求的
老大,你这个也不靠谱。我对用户名和密码的验证,都是在登陆对话框的类--内部实现的。就是一点击登陆,就开始验证。就像QQ的登陆界面那样。 正确,就accept,错误就阻塞。 不过要是有好的思路,可以教教我怎么搞。
jiamianshiye 2013-08-21
  • 打赏
  • 举报
回复
引用 3 楼 hai200501019 的回复:
把exec调用放在while循环里,判断exec的返回值是你需要的就跳出循环
兄弟。这个真心不行,一旦用exec,弹出的软键盘就无法获得焦点。因为exec会让所有其他窗体失效呀。
accsoar 2013-08-21
  • 打赏
  • 举报
回复
你可以用show(),然后把Ok按钮和cancel按钮的clicked信号关联到两个槽函数,分别处理点击ok和cancle的后续动作,这个对话框不要作为局部变量,而是作为成员变量,在OK对应的槽函数里: QString name = dlg.getName(); Qstring pw = dlg.getPassword(); //处理登录账号密码 这是满足你需求的
海的神话 2013-08-21
  • 打赏
  • 举报
回复
把exec调用放在while循环里,判断exec的返回值是你需要的就跳出循环
jiamianshiye 2013-08-21
  • 打赏
  • 举报
回复
引用 1 楼 xiuxianshen 的回复:
为什么不用show函数呢?
我想从登陆对话框获得一个返回值,也就是说判断用户名和密码是否正确,用exec可以实现accept。但是用show的话,不知道如何实现让登陆对话框一直阻塞,也不知道该如何获取 账户密码是否正确。 我只想到了个重载exec...
xiuxianshen 2013-08-21
  • 打赏
  • 举报
回复
为什么不用show函数呢?

16,816

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧