在为隐藏的 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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 QToolbar 上隐藏 QWidget?

Qt绘图学习

QWidget初始化函数调用中的不同行为

Qt系列文章之三十八(基于QWidget 创建和使用动态dll共享库)

Qt系列文章之三十八(基于QWidget 创建和使用动态dll共享库)

是否隐藏 QWidget 对象接收信号