在为隐藏的 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.
}
};
我有一个 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.
}
};