2016-04-25 49 views
1

在我的应用程序中,我有一个标有Insert的按钮,点击后会弹出一个对话框供用户写一些信息。在对话框的底部,有SaveExit按钮。当您单击Exit时,对话框关闭。如果再次单击Insert按钮,则会出现对话框,依此类推。如何防止弹出对话框改变其位置?

问题在于,每次关闭然后打开时,对话框都会不断更改其在屏幕上的位置。水平位置是相同的,但它会继续沿着几英寸的垂直位置。

如何修复此对话框的位置?!

+1

您是否传递父窗口? –

+0

@FrankOsterfeld:在我的MainWindow.ui中,我打开了Add_Info.ui表单,除非整个应用程序关闭,否则在每次关闭然后重新打开时都会更改其位置。如果应用程序再次打开,则Add_Info表单会在屏幕中心的原始位置打开。希望回答你的问题(否则请解释“通过父窗口”是什么意思) –

回答

3

窗口/对话框的放置通常由窗口管理器完成,通常应用某种(伪)智能算法。例如,在KDE你有几个设置之间进行选择,如智能零走投无路随机

为了确保Qt的对话框始终放置在显示相同的位置,你就必须使用QWidget::move()QWidget::restoreGeometry()自己保存和恢复位置,通常来自重新实现的show()插槽。阅读这些方法的文档;这可能是多毛的WRT绝对/相对位置。

+2

此外,在某些平台上,模态对话框消息会自动定位,你根本无法改变它们的位置。 OS X就是这样一个平台。 –

+0

我试图使用restoreGeometry(),但我无法弄清楚它是如何工作的,我张贴另一个问题[这里](http://stackoverflow.com/q/36860487/2135363) –

+0

@ Suda.nese使用'QWidget: :移动()'与一些固定点,你可以检查行为是由窗口管理器确定,或者你必须搜索你自己的代码的原因。 – Murphy