【问题标题】:How to maintain position of a QDialog on hide/show如何在隐藏/显示时保持 QDialog 的位置
【发布时间】:2016-11-08 13:13:37
【问题描述】:

我有一个 QDialog,其中有一个可检查的按钮,女巫打开/关闭(隐藏/显示)另一个窗口(该窗口也是一个 QDialog)。

我的问题是我希望在隐藏和打开后保持第二个 QDialog 的位置(例如:我将 QDialog 移动到屏幕的一角,当我隐藏然后显示它时,QDialog 需要在同一个角落)。

此时它似乎恢复到了初始位置。我在similar 找到了一篇关于它的类似文章,但在我的情况下,我有两个单独的窗口,我可以将第二个 QDialog 移动到屏幕上。有人遇到过这个问题吗?

【问题讨论】:

  • 我现在无法测试,所以你可以试试setVisible(true) 代替 show 吗?
  • 我拥有除了这个属性之外的所有机制,可以留在同一个地方。这是我找不到解决方案的问题。
  • @drescherjm 它应该这样做。它是这样定义的:doc.qt.io/qt-5/qwidget.html#hide
  • 您可以覆盖changeEvent(QEvent *event) 并保存并恢复对话框隐藏或显示时的位置。
  • @drescherjm 好吧,它只有一个对话框或子类。没有小部件。

标签: c++ qt


【解决方案1】:

AFAIK 无需任何代码即可工作:显示/隐藏小部件时位置不会改变。

无论如何,你可以通过它的geometry 存储你的QDialog 的位置:

// save geometry

QRect geometry = my_dialog->geometry();
my_dialog->hide();

// restore geometry

my_dialog->show();
my_dialog->setGeometry(geometry);

请注意,几何是相对于父级的:我在这里假设您的 QDialog 是无模式的。

【讨论】:

  • 这似乎工作正常。显然我无法覆盖 setVisible 函数,但我设法创建了一个自己的函数来修改它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
相关资源
最近更新 更多