首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QWidget溢出

QWidget溢出
EN

Stack Overflow用户
提问于 2018-01-17 13:00:09
回答 2查看 512关注 0票数 1

我正在处理的对话框上有一个主QGridLayout。它被分成不同大小的内容容器(QWidgets和它们自己的QVBoxLayout),每个容器在网格布局中分配特定数量的网格列(取决于它们的需求)。

每个内容容器都有一些按钮。其中一些按钮应该跨越两个内容容器。我试图做到这一点的方法是将这些2容器按钮溢出到它们的布局之外,同时保持内容容器的大小不变(根据网格中的列数来分配)。我不知道如何做到这一点,因为要么容器的大小会改变,要么QWidget不会溢出。

是否有一种方法可以在按钮上设置某种溢出属性,还是只需要将按钮放在网格上?我试图避免这样做,因为我认为一旦新的需求出现,它可能会很混乱,我将不得不重新计算它们的位置。

下面是我想要做的事情的图片:

以下是相关代码:

代码语言:javascript
复制
ModeDialog::ModeDialog(MainWindow *pMainWindow)
  : XDialog(pMainWindow, tr("Operating Mode"), true)
{
    XDialog::AddButton(tr("Exit"), QDialogButtonBox::AcceptRole);

ConstructStylingFromTemplates();

CSettings* Settings = pMainWindow->GetSettings();

QString SlotString1, SlotString2;
QGridLayout* mp_MainLayout = new QGridLayout();
mp_MainLayout->setContentsMargins(10, 30, 10, 20);

// Construct Channel Group Layouts with Channel Containers
for (int i = 0; i < 3; i++)
{
  switch(i)
  {
    case 0: { SlotString1 = "A"; SlotString2 = "B"; break; }
    case 1: { SlotString1 = "C"; SlotString2 = "D"; break; }
    case 2: { SlotString1 = "E"; SlotString2 = "F"; break; }
  }

  QHBoxLayout* ChannelGroupLayout = new QHBoxLayout();
  if (CSettings_RR::IsE1T1Channel(Settings, i*2))
  {
    AddChannelToChannelGroup(ChannelGroupLayout, SlotString1);
    AddChannelToChannelGroup(ChannelGroupLayout, SlotString2);
  }
  else if(CSettings_RR::IsPtpChannel(Settings, i*2))
  {
    AddChannelToChannelGroup(ChannelGroupLayout, SlotString1);
  }
  else if(CSettings_RR::IsOtaChannel(Settings, i*2))
  {
    AddChannelToChannelGroup(ChannelGroupLayout, SlotString1);
  }
  else
  {
    continue;
  }

  mp_MainLayout->addLayout(ChannelGroupLayout, 0, i*2, 1, 2);
}

SetContentLayout(mp_MainLayout);}

void ModeDialog::AddChannelToChannelGroup(QHBoxLayout* ChannelGroupLayout, QString SlotString)
{
  QVBoxLayout* ChannelLayout = new QVBoxLayout();

  // Add Label to Channel Layout
  XLabel* ChannelLabel = new XLabel("Channel " + SlotString, m_textSize, true, Qt::AlignCenter | Qt::AlignVCenter, this);
  ChannelLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
  ChannelLayout->addWidget(ChannelLabel);

  // Add Container to Channel Layout
  QWidget* ChannelContainer = new QWidget();
  ChannelContainer->setStyleSheet(m_styleSheetChannelContainer);
  ChannelLayout->addWidget(ChannelContainer);

  //WIP - add buttons to container
  QVBoxLayout* ChannelContainerLayout = new QVBoxLayout();
  ChannelContainer->setLayout(ChannelContainerLayout);

  XPushButton* ModeButton = new XPushButton(tr("CLOCK"), 160, 40, this, true);
  ChannelContainerLayout->addWidget(ModeButton);
  //WIPEND

  // Add Channel Layout to Channel Group Layout
  ChannelGroupLayout->addLayout(ChannelLayout);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-17 13:15:18

使用QWidgets无法溢出。

但这是有可能的QML。

默认情况下,项将溢出,您必须管理它们的位置和大小(以及z索引,以判断谁与谁重叠):http://doc.qt.io/qt-5/qtquick-positioning-topic.html

您必须使用QML布局或将项的父属性clip设置为true,以避免溢出。

票数 3
EN

Stack Overflow用户

发布于 2018-01-17 13:12:39

在Qt中没有溢出小部件的方法,即使不使用布局也是如此。一个小部件总是被限制在它的父部件的边界上。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48301819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档