【问题标题】:Problem with a Qt layout, I can not remove a spaceQt 布局有问题,我无法删除空格
【发布时间】:2010-11-24 19:38:34
【问题描述】:

早上好, 我必须将一些 QWidget 和布局布局到主布局中,但是我有一个无法删除的空间问题。 基本上我要实现的是一个水平布局,其中包含一个网格布局和一些按钮(都在一条水平线上)。网格布局 (2x2) 包含 2 个 QLabels 和 2 个 QLeds。 不幸的是,Qt 在网格布局和第一个按钮之间放置了一个空格,正如您在此处所附图片中看到的那样 http://img413.imageshack.us/img413/9132/problemhu.png 我会删除这样的空间。 这是我写的代码:

QGridLayout* gl = new QGridLayout();
gl->setAlignment(Qt::AlignLeft);
gl->setContentsMargins(0, 0, 0, 0);
gl->addWidget(activeLabel, 0, 0);
gl->addWidget(m_focusLed, 0, 1);
gl->addWidget(encodingLabel, 1, 0);
gl->addWidget(m_encodingLed, 1, 1);

这创建了网格布局并在其上添加了 QLabels 和 QLeds。 然后我将按钮添加到水平布局中:

  /* layout buttons */
  QHBoxLayout* lo = new QHBoxLayout();
  lo->setSpacing(0);
  lo->addLayout(gl); // <--here I add the grid layout
  lo->addWidget(m_goToBeginBtn);
  lo->addWidget(m_goToEndBtn);
  lo->addWidget(m_frewBtn);
  lo->addWidget(m_fforBtn);
  lo->addSpacing( 10 );
  lo->addWidget(m_ffrewBtn);
  lo->addWidget(m_ffforBtn);
  lo->addSpacing(10);
  lo->addWidget(m_prevBtn);
  lo->addWidget(m_nextBtn);
  lo->addWidget(m_playBtn);
  lo->addWidget(m_stopBtn);
  lo->addWidget(m_cutBtn);
  lo->addSpacing(10);
  lo->addWidget(m_zoomInBtn);
  lo->addWidget(m_zoomOutBtn);
  lo->addSpacing(10);
  lo->addWidget(m_bgSndCheckBox);
  lo->addWidget( m_showPanelBtn);

我不知道为什么 Qt 在网格布局和第一个按钮之间放置这样的空间。我会删除它。我能怎么做?我没有从 Qt 邮件列表中获得帮助。

最好的问候

【问题讨论】:

    标签: qt qt4


    【解决方案1】:

    如何解决这个问题很大程度上取决于您希望看到的行为。我猜你想要的是标签和 LED 保持在原位,并保持它们的大小。

    发生的情况是网格布局正在随着您的窗口调整大小(就像您的按钮一样),但左对齐使控件保持在左侧,因此是空间。

    首先,删除 gl->setAlignment(Qt::AlignLeft) 行。

    其次,您要确保在 QLabels 和 QLeds 上正确设置 sizePolicy,否则您的 QLeds 将开始水平调整大小。你想要的是一个固定的水平尺寸策略。这是一个例子:

    QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
    sizePolicy.setHeightForWidth(label->sizePolicy().hasHeightForWidth());
    label->setSizePolicy(sizePolicy);
    

    完成同一件事的完全不同的方法是在水平布局上添加一组对 setStretch() 的调用。但是您必须对布局中要拉伸的每一列执行此操作。基本上每个按钮都有,但跳过了第一列中的网格布局。像这样……

    lo->setStretch(1, 1);  // Column 1 is your first button
    lo->setStretch(2, 1);
    ...
    lo->setStretch(19, 1)l  // 19 columns in total, 15 buttons plus 4 spacing.
    

    【讨论】:

    • 非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多