我有一个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()”函数。这种眨眼影响我不想要。
所以,请建议:
我不希望用户对QDialog进行切换效果,请提示。
谢谢,
答案 0 :(得分:2)
我使用过QDialog,但从未需要在运行时更改模态。关于Qt :: WindowModality
,Qt docs非常明确和必要此属性仅适用于Windows。模态小部件阻止 获取输入的其他窗口中的小部件。这个的价值 属性控制窗口小部件被阻止的窗口 可见。在窗口可见时更改此属性没有 影响;你必须先隐藏()小部件,然后再显示()它。
所以似乎序列指令hide()和show()需要在运行时更改模态。一个技巧可能是创建另一个具有与原始属性相同属性的并行QDialog,除了模态,并使其与现有重叠。这不是“线性”,但它有时用于“加倍”对象的解决方案。在这种情况下,您必须记住您当前正在使用的QDialog。