Qt在运行时改变对话框的模态而不是第一次隐藏它而不是显示

时间:2016-10-21 07:27:28

标签: c++ qt qdialog

我有一个QMainWindow,然后我使用dialog-> show()打开另一个对话框; 在对话框中我有一个按钮说“Button1”和“Button2”。

这里,当用户按下“Button1”而不是Dialog的模态时应改为“Qt :: ApplicationModal”,当用户按“Button2”时,对话框的形式应改为“Qt :: NonModal”。

我可以使用“setWindowModality(Qt :: ApplicationModal);”来做到这一点。单击“Button1”,然后单击“hide();并显示();”和“setWindowModality(Qt :: NonModal);”单击“Button2”,然后单击“hide();和show();”

但是,如果我使用上面的方法而不是QDialog会产生眨眼效果,这很明显,因为我正在使用“hide()和show()”函数。这种眨眼影响我不想要。

所以,请建议:

  1. 如何在更改模态后更改show()打开的QDialog的模态而不使用“hide()”和“show()”?
  2. 如果没有其他方法可以在运行时更改QDiloag的模态,然后“隐藏”和“显示”,那么可以减少QDialog的影响消失然后再次显示。
  3. 我不希望用户对QDialog进行切换效果,请提示。

    谢谢,

1 个答案:

答案 0 :(得分:2)

我使用过QDialog,但从未需要在运行时更改模态。关于Qt :: WindowModality

,Qt docs非常明确和必要
  

此属性仅适用于Windows。模态小部件阻止   获取输入的其他窗口中的小部件。这个的价值   属性控制窗口小部件被阻止的窗口   可见。在窗口可见时更改此属性没有   影响;你必须先隐藏()小部件,然后再显示()它。

所以似乎序列指令hide()和show()需要在运行时更改模态。一个技巧可能是创建另一个具有与原始属性相同属性的并行QDialog,除了模态,并使其与现有重叠。这不是“线性”,但它有时用于“加倍”对象的解决方案。在这种情况下,您必须记住您当前正在使用的QDialog。