在为隐藏的 QWidget 调用 show() 之后移动 QLabel

Move QLabel after show() is called for hidden QWidget

我有一个 QDialog window,其中显示了一个用于输入文本的栏,以及两个按钮(一个用于接受,一个用于取消),以及顶部说明“请提供 ID...” .同时我有一条默认隐藏的 warning/error 消息。

window是这样的:

问题是当我调用 show() 来显示警告时,它不会重新缩放 window,因此警告显示在输入栏其余部分的顶部。如下所示:

我一直在查看一些属性,例如 sizePolicy 甚至使用 adjustSize,但我无法使例如顶部指令在警告时仅向顶部移动一点显示,因此它们不会堆叠在一起。

我想应该有一种简单的方法来管理它,有人可以指出我缺少什么或者我应该改变什么吗?

我使用的Qt版本是Qt 5.4

所有元素都必须在布局中。警告尚未添加到布局中,因此当它显示时它保留其原始位置。

供参考,对话框大概可以这样写:

class IdDialog : public QDialog {
  QGridLayout m_layout{this};
  QLabel m_header{tr("Enter an ID")};
  QLabel m_warning{tr("<font color=\"red\">Subject not found.</font>")};
  QLineEdit m_subject;
  QDialogButtonBox m_box;
  QPushButton *const m_disconnect = m_box.addButton(tr("Disconnect"), QDialogButtonBox::RejectRole);
  QPushButton *const m_confirm = m_box.addButton(tr("Confirm"), QDialogButtonBox::AcceptRole);
public:
  IdDialog(QWidget *parent = nullptr) : QDialog(parent) 
  {
    m_layout.addWidget(0, 0, &m_header);
    m_layout.addWidget(1, 0, &m_warning);
    m_layout.addWidget(2, 0, &m_subject);
    m_layout.addWidget(3, 0, &m_box);
    m_warning.hide();
    // connect signals here, etc.
  }
};