【问题标题】:How to bring QtWidget in front of other QtWIdget?如何将 QWidget 放在其他 QWIdget 前面?
【发布时间】:2024-01-03 17:55:02
【问题描述】:

我有三个独立的QtWidget,它们之间有父子关系。我按以下顺序显示它们。

firstWidget.show();
SecondtWidget.show();
ThirdWidget.show();

在第二个小部件中,我正在加载一个基本上是黑屏的 jar。所以有时由于系统 jar 的缓慢加载需要时间,这导致第三个小部件落后于第二个小部件。

在 Qt 中是否有任何方式,无论显示小部件的顺序是什么,在我的情况下,特定的小部件 thirdWidget 始终位于顶部。

我已经尝试过 raise、activateWidow、setFocus、requestActiveWindow、SetWindowState 和 Window 标志,但在我的情况下似乎没有任何效果。

任何帮助将不胜感激。

【问题讨论】:

  • 一个minimal reproducible example 会很好。很难说它是否可以工作或为什么不......
  • 记住,同一父级中的QWidgets 越晚添加,它们的优先级越高。如果您不执行任何操作,默认情况下最后添加的小部件将位于其前任之上。

标签: c++ qt qt5 qtwidgets


【解决方案1】:

有点难,因为当 jar 加载过程完成时你没有得到信息

但是假设你知道,那么你可以通过raising它把一个小部件带到顶部:)

来自文档:

在此调用之后,小部件将在视觉上位于任何重叠的同级小部件的前面。

这实际上是您需要的... https://doc.qt.io/qt-5/qwidget.html#raise

【讨论】:

  • 感谢您的回答。是的,我已经尝试过,但是我拥有的小部件是独立的,它们不是兄弟姐妹,所以这个属性似乎不起作用。而且jar加载过程没有明确的时间,这就是问题首先发生的原因。