Qt在运行时改变对话框的模式,而不是第一次隐藏它,然后再显示

Qt change modality of a Dialog at run time without hide it for first time and than show

本文关键字:第一次 隐藏 显示 然后 运行时 改变 对话框 模式 Qt      更新时间:2023-10-16

我有一个QMainWindow和从我打开另一个对话框使用dialog->show();在对话框中,我有一个按钮,命名为"Button1"answers"Button2"。

在这里,当用户按下"Button1"时,对话框的模态应该改为"Qt::ApplicationModal",当用户按下"Button2"时,对话框的模态应该改为"Qt::NonModal"。

我可以做到这一点,使用"setwindowmodal (Qt::ApplicationModal);"里面的"Button1"点击后跟着"hide();和"settwindowmodal (Qt::NonModal);"里面的"Button2"点击后跟着"hide();并显示();"

但是,如果我使用上述方法比QDialog给出一个闪烁的影响,这是显而易见的,因为我使用"隐藏()和显示()"函数。这个闪烁的效果我不想要。

所以,请建议:

  1. 如何改变由show()打开的QDialog的模态,而不使用"hide()"answers"show()"在改变模态后?
  2. 如果没有其他的方法来改变QDialog在运行时的模式,然后是"隐藏"answers"显示",那么有可能减少QDialog消失然后再次可见的影响吗?

我不希望用户对QDialog有切换效果,请建议。

谢谢,

我使用过QDialog,但从未需要在运行时更改模态。Qt文档中对Qt::WindowModality的描述非常清晰和必要

这个属性只对windows有意义。模态小部件可以防止其他Windows中的小部件无法获得输入。它的价值属性控制小部件被阻塞时哪个窗口被阻塞可见。在窗口可见时更改此属性没有效果;您必须先hide()这个小部件,然后再show()它。

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