【问题标题】:Forcing QDialog to stay open强制 QDialog 保持打开状态
【发布时间】:2011-08-20 01:31:36
【问题描述】:

当对话框的accept() 插槽被调用时,我应该如何最好地强制 QDialog 保持打开状态?我正在考虑重新实现该函数以使对话框的 exec 返回而不隐藏对话框,但想知道是否有更好的方法来实现这一点。

【问题讨论】:

    标签: c++ qt qt4 qdialog


    【解决方案1】:

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

    • 移除允许移动 Dock 的功能 (QDockWidget::DockWidgetMovable)
    • 将停靠小部件设置为浮动 (setFloating(true))
    • 将停靠小部件上的项目连接到主窗口上的相应信号和插槽

    参考文献

    【讨论】:

    • 嗯,但我目前在那个 QDialog 上使用exec()。当用户在QDockWidget 中输入一些值时,如何让主线程等待?
    • 在子窗口小部件上的文本更改(或其他可能的更改)时处理用户数据。换句话说,将 textChanged 信号连接到您的处理函数。
    • 是的,但不幸的是,我的代码目前在单个线程上运行,该线程等待 QDialog 完成exec。我想我最好的选择是重构,这样就不会出现这种情况了?
    • 是的,这将涉及将处理对话框中数据的逻辑从 exec 调用之后移动到它自己的方法。如果您需要使用 QDialog,我可以做一些研究以找到适合约束的答案。
    • 不,很好。我可以不用 QDialog,非常感谢您的帮助!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-01-27
      • 2015-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多