强制QDialog保持打开状态
问题描述:
当对话框的accept()
插槽被调用时,我应该如何最好地强制QDialog保持打开状态?我正在考虑重新实现这个功能,让对话框的exec在没有隐藏对话框的情况下返回,但想知道是否有更好的方法来完成这个任务。强制QDialog保持打开状态
答
而不是使用QDialog,我会用QDockWidget完成这个效果。
- 删除功能,使码头被移动(QDockWidget :: DockWidgetMovable)
- 将停靠小部件浮动(setFloating(真))
- 码头上的小部件连接项目到适当的信号和在主窗口中时隙
参考
答
你需要让你的QDialog
无模式,通过调用show
,而不是exec
,并使用自定义的信号,而不是accept
,因为accept
关闭窗口。您可以使用exec
调用后的代码将该信号连接到主窗口中的某个插槽。
如果还不是这种情况,应该在某个地方(作为主窗口类中的成员或打开它的函数中的静态变量)保留一个指向QDialog的引用/指针,以便能够为避免创建对话框的多个实例,并且您需要确保只连接一次信号/插槽。
嗯,但我目前在该QDialog上使用'exec()'。当用户在'QDockWidget'中输入一些值时,我怎样才能让主线程等待? – wrongusername
当文本在子窗口小部件(或其他可变更改)上更改时处理用户数据。换句话说,将textChanged信号连接到您的处理函数。 – ccozad
是的,但不幸的是,我的代码目前运行在一个单独的线程上,等待QDialog来完成'exec'。我认为我最好的选择是重构,以至于事情并非如此? – wrongusername