gpt4 book ai didi

c++ - QWidget溢出

转载 作者:行者123 更新时间:2023-11-30 00:44:34 24 4
gpt4 key购买 nike

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

每个内容容器都有一些按钮。其中一些按钮应该跨越 2 个内容容器。我试图实现这一点的方法是将这些 2 容器按钮溢出到它们的布局之外,同时保持内容容器的大小相同(根据网格内的列数分配的内容)。我不知道该怎么做,因为容器的大小发生了变化,或者 QWidget 没有溢出。

有没有办法在按钮上设置某种溢出属性,或者我是否必须将按钮放在网格上?我尽量避免这样做,因为我认为一旦出现新的需求,它可能会很困惑,我将不得不重新计算它们的定位。

这是我正在尝试做的事情的图片:

enter image description here

相关代码如下:

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);
}

最佳答案

使用 QWidgets 是不可能溢出的。

但使用 QML 是可能的。
默认情况下,项目会溢出,你必须管理它们的位置和大小(和 z-index 来告诉谁重叠了谁):http://doc.qt.io/qt-5/qtquick-positioning-topic.html

你必须使用 QML layouts或设置项目的父属性 clip为 true 以避免溢出。

关于c++ - QWidget溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48301819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com