在为隐藏的 QWidget

问题描述

我有一个 QDialog 窗口,其中显示一个用于输入文本的栏,以及两个按钮(一个用于接受,一个用于取消)和顶部指令“请提供 ID...”。同时,我有一条认隐藏的警告/错误消息。

窗口是这样的:

enter image description here

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

enter image description here

我一直在查看诸如 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,&m_header);
    m_layout.addWidget(1,&m_warning);
    m_layout.addWidget(2,&m_subject);
    m_layout.addWidget(3,&m_box);
    m_warning.hide();
    // connect signals here,etc.
  }
};