我正在处理的对话框上有一个主QGridLayout。它被分成不同大小的内容容器(QWidgets和它们自己的QVBoxLayout),每个容器在网格布局中分配特定数量的网格列(取决于它们的需求)。
每个内容容器都有一些按钮。其中一些按钮应该跨越两个内容容器。我试图做到这一点的方法是将这些2容器按钮溢出到它们的布局之外,同时保持内容容器的大小不变(根据网格中的列数来分配)。我不知道如何做到这一点,因为要么容器的大小会改变,要么QWidget不会溢出。
是否有一种方法可以在按钮上设置某种溢出属性,还是只需要将按钮放在网格上?我试图避免这样做,因为我认为一旦新的需求出现,它可能会很混乱,我将不得不重新计算它们的位置。
下面是我想要做的事情的图片:

以下是相关代码:
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);
}发布于 2018-01-17 13:15:18
使用QWidgets无法溢出。
但这是有可能的QML。
默认情况下,项将溢出,您必须管理它们的位置和大小(以及z索引,以判断谁与谁重叠):http://doc.qt.io/qt-5/qtquick-positioning-topic.html
您必须使用QML布局或将项的父属性clip设置为true,以避免溢出。
发布于 2018-01-17 13:12:39
在Qt中没有溢出小部件的方法,即使不使用布局也是如此。一个小部件总是被限制在它的父部件的边界上。
https://stackoverflow.com/questions/48301819
复制相似问题