在为隐藏的 QWidget 调用 show() 之后移动 QLabel [关闭]
Posted
技术标签:
【中文标题】在为隐藏的 QWidget 调用 show() 之后移动 QLabel [关闭]【英文标题】:Move QLabel after show() is called for hidden QWidget [closed] 【发布时间】:2021-05-28 19:06:35 【问题描述】:我有一个 QDialog 窗口,其中显示了一个输入文本的栏,以及两个按钮(一个用于接受,一个用于取消),以及顶部指令“请提供 ID...”。同时我有一个默认隐藏的警告/错误消息。
窗口是这样的:
问题是当我调用show()
显示警告时,它不会重新缩放窗口,因此警告显示在输入栏的其余部分顶部。如下图:
我一直在查看sizePolicy
之类的一些属性,甚至使用adjustSize
,但我无法让例如顶部指令在显示警告时移动到顶部,所以它们不会堆叠在一起。
我认为应该有一种简单的方法来管理这个问题,有人可以指出我遗漏了什么或者我应该改变什么吗?
我使用的 Qt 版本是 Qt 5.4
【问题讨论】:
您是否使用任何对话框布局?标签在那个布局中吗? 请提供minimal reproducible example 【参考方案1】:所有元素都必须在布局中。警告尚未添加到布局中,因此在显示时它会保留其原始位置。
作为参考,对话框可以大致写成如下:
class IdDialog : public QDialog
QGridLayout m_layoutthis;
QLabel m_headertr("Enter an ID");
QLabel m_warningtr("<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.
;
【讨论】:
以上是关于在为隐藏的 QWidget 调用 show() 之后移动 QLabel [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Qt系列文章之三十八(基于QWidget 创建和使用动态dll共享库)