强制QDialog保持打开状态

问题描述:

当对话框的accept()插槽被调用时,我应该如何最好地强制QDialog保持打开状态?我正在考虑重新实现这个功能,让对话框的exec在没有隐藏对话框的情况下返回,但想知道是否有更好的方法来完成这个任务。强制QDialog保持打开状态

而不是使用QDialog,我会用QDockWidget完成这个效果。

  • 删除功能,使码头被移动(QDockWidget :: DockWidgetMovable)
  • 将停靠小部件浮动(setFloating(真))
  • 码头上的小部件连接项目到适当的信号和在主窗口中时隙

参考

+0

嗯,但我目前在该QDialog上使用'exec()'。当用户在'QDockWidget'中输入一些值时,我怎样才能让主线程等待? – wrongusername

+0

当文本在子窗口小部件(或其他可变更改)上更改时处理用户数据。换句话说,将textChanged信号连接到您的处理函数。 – ccozad

+0

是的,但不幸的是,我的代码目前运行在一个单独的线程上,等待QDialog来完成'exec'。我认为我最好的选择是重构,以至于事情并非如此? – wrongusername

你需要让你的QDialog无模式,通过调用show,而不是exec,并使用自定义的信号,而不是accept,因为accept关闭窗口。您可以使用exec调用后的代码将该信号连接到主窗口中的某个插槽。

如果还不是这种情况,应该在某个地方(作为主窗口类中的成员或打开它的函数中的静态变量)保留一个指向QDialog的引用/指针,以便能够为避免创建对话框的多个实例,并且您需要确保只连接一次信号/插槽。