Qt在运行时改变对话框的模式,而不是第一次隐藏它,然后再显示
Qt change modality of a Dialog at run time without hide it for first time and than show
我有一个QMainWindow和从我打开另一个对话框使用dialog->show();在对话框中,我有一个按钮,命名为"Button1"answers"Button2"。
在这里,当用户按下"Button1"时,对话框的模态应该改为"Qt::ApplicationModal",当用户按下"Button2"时,对话框的模态应该改为"Qt::NonModal"。
我可以做到这一点,使用"setwindowmodal (Qt::ApplicationModal);"里面的"Button1"点击后跟着"hide();和"settwindowmodal (Qt::NonModal);"里面的"Button2"点击后跟着"hide();并显示();"
但是,如果我使用上述方法比QDialog给出一个闪烁的影响,这是显而易见的,因为我使用"隐藏()和显示()"函数。这个闪烁的效果我不想要。
所以,请建议:
- 如何改变由show()打开的QDialog的模态,而不使用"hide()"answers"show()"在改变模态后?
- 如果没有其他的方法来改变QDialog在运行时的模式,然后是"隐藏"answers"显示",那么有可能减少QDialog消失然后再次可见的影响吗?
我不希望用户对QDialog有切换效果,请建议。
谢谢,
我使用过QDialog,但从未需要在运行时更改模态。Qt文档中对Qt::WindowModality的描述非常清晰和必要
这个属性只对windows有意义。模态小部件可以防止其他Windows中的小部件无法获得输入。它的价值属性控制小部件被阻塞时哪个窗口被阻塞可见。在窗口可见时更改此属性没有效果;您必须先hide()这个小部件,然后再show()它。
因此,似乎序列指令hide()和show()需要在运行时改变模态。一个技巧可以是创建另一个与原始QDialog具有相同属性(除了模态)的并行QDialog,并使其与现有QDialog重叠。这不是那么"线性",但这是一种有时用于"双重"对象的解决方案。在这种情况下,您必须记住当前使用的是哪个QDialog。
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 我必须构建我的项目 2 次,第一次失败,因为它无法打开库
- 是什么导致我的循环在第一次迭代中运行得更慢
- QLibrary 函数在第一次调用时工作缓慢
- 第一次尝试使用new动态创建结构数组,程序挂起没有错误
- 为什么第一次迭代后的指针指向随机值?
- 如何防止GUI挂起,同时允许第二次操作与Qt中的第一次操作一起执行
- LAPACK函数在第一次迭代后变慢
- 为什么 Boost unordered_map 在第一次插入时需要太多时间?
- EGL 在第一次 opengl 函数调用时崩溃
- 提升 Asio SSL 无法第二次接收数据(第一次确定)
- 数组仅在第一次返回错误值
- C++程序在第一次尝试时会给出垃圾,但如果它捕获异常并重试,则会给出适当的值
- 为什么字符串的长度在第一次读取文件时相差 1?
- 为什么 new 第一次分配 1040 个额外的字节?
- 插入多音符:在该值的第一次发生之前,而不是在上次发生之后
- 第一次尝试在线编程给出错误的答案
- 第一次运行时,用CL挂起的代码挂太长
- 将消息发布到隐藏表单第一次不起作用
- Qt在运行时改变对话框的模式,而不是第一次隐藏它,然后再显示