gpt4 book ai didi

c++ - 如何根据其内容调整 QDialog 的窗口大小?

转载 作者:太空宇宙 更新时间:2023-11-04 13:13:46 26 4
gpt4 key购买 nike

我有一个带有 QScrollArea 的对话框来显示任意数量的复选框。如何让对话框调整宽度,使 QScrollArea 没有水平滚动条(如果内容不是特别宽)。

std::vector<std::string> vec_strCheckboxLabel;
vec_strCheckboxLabel.push_back("Checkbox 1");
vec_strCheckboxLabel.push_back("Checkbox 2");
vec_strCheckboxLabel.push_back("Checkbox 3 is really long and causes a horizontal scroll bar to appear");
vec_strCheckboxLabel.push_back("Checkbox 4");
vec_strCheckboxLabel.push_back("Checkbox 5");

m_pWidget = new QDialog;
m_pWidget->setWindowTitle("My Dialog");
m_pWidget->setWindowModality(Qt::ApplicationModal);
m_pWidget->setMinimumWidth(400);
QVBoxLayout * pWidgetLayout = new QVBoxLayout(m_pWidget);
QLabel * pLabel = new QLabel("Hello");
pWidgetLayout->addWidget(pLabel);

QHBoxLayout * pTopButtonsLayout = new QHBoxLayout(m_pWidget);
pWidgetLayout->addLayout(pTopButtonsLayout);

QPushButton * pButton;

pButton = new QPushButton("Select all", m_pWidget);
connect(pButton, SIGNAL(clicked()), this, SLOT(slotSelectAll()));
pTopButtonsLayout->addWidget(pButton);

pButton = new QPushButton("Select none", m_pWidget);
connect(pButton, SIGNAL(clicked()), this, SLOT(slotSelectNone()));
pTopButtonsLayout->addWidget(pButton);

// the checkboxes in a scroll area
{
QFrame * pFrameCheckboxes = new QFrame(m_pWidget);
QVBoxLayout * pCheckboxesLayout = new QVBoxLayout(pFrameCheckboxes);
// this frame takes all available space in the QDialog
pFrameCheckboxes->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);

for (unsigned int i = 0, iEnd = vec_strCheckboxLabel.size(); i != iEnd; ++i)
{
QCheckBox * poCheckBox = new QCheckBox(vec_strCheckboxLabel[i].c_str());
pCheckboxesLayout->addWidget(poCheckBox);
}

// put into scroll area
QScrollArea * pScrollAreaTheCheckboxes = new QScrollArea(m_pWidget);
pWidgetLayout->addWidget(pScrollAreaTheCheckboxes);
pScrollAreaTheCheckboxes->setWidget(pFrameCheckboxes);
}

最佳答案

问题是滚动区域默认限制其大小以占用可用空间;它不要求布局空间。您必须明确告诉它改变该行为。

查看 QAbstractScrollArea::SizeAdjustPolicy .您可能正在寻找 AdjustToContentsOnFirstShow,如下所示:

pScrollAreaTheCheckboxes->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContentsOnFirstShow);

不幸的是,如果这是您想要的,您不能为水平和垂直方面设置不同的调整策略。明智地使用 QSizePolicy 和布局设置(例如 setStretch())可以解决这个问题。

Qt4
作为 Qt4 的解决方法,检查视口(viewport)的 sizeHint() 并将滚动区域的最小大小设置为该值。

 pScrollAreaTheCheckboxes->setMinimumSize(pScrollAreaTheCheckboxes->viewport()->sizeHint());

在初始化所有复选框后执行此操作。

关于c++ - 如何根据其内容调整 QDialog 的窗口大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38475559/

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