我正在使用QVBoxLayout来安排垂直堆叠的小部件。 QVBoxLayout包含在QScrollArea中。我想要一些小部件最初隐藏起来,只有当复选框被选中时才显示出来。这里是我使用的代码的一个例子。在QScrollArea中为QVBoxLayout中最初隐藏的小部件预留空间
MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
QVBoxLayout *layout = new QVBoxLayout(this);
QLabel *labelLogTypes = new QLabel(tr("Log Types"));
m_checkBoxCsv = new QCheckBox(tr("&Delimited File (CSV)"));
m_labelDelimiter = new QLabel(tr("Delimiter:"));
m_lineEditDelimiter = new QLineEdit(",");
checkBoxCsv_Toggled(m_checkBoxCsv->isChecked());
connect(m_checkBoxCsv, SIGNAL(toggled(bool)), SLOT(checkBoxCsv_Toggled(bool)));
QHBoxLayout *layoutDelimitedChar = new QHBoxLayout();
layoutDelimitedChar->addWidget(m_labelDelimiter);
layoutDelimitedChar->addWidget(m_lineEditDelimiter);
m_checkBoxXml = new QCheckBox(tr("&XML File"));
m_checkBoxText = new QCheckBox(tr("Plain &Text File"));
// Now that everything is constructed, put it all together
// in the main layout.
layout->addWidget(labelLogTypes);
layout->addWidget(m_checkBoxCsv);
layout->addLayout(layoutDelimitedChar);
layout->addWidget(m_checkBoxXml);
layout->addWidget(m_checkBoxText);
layout->addStretch();
}
MyWidget::checkBoxCsv_Toggled(bool checked)
{
m_labelDelimiter->setVisible(checked);
m_lineEditDelimiter->setVisible(checked);
}
我想m_labelDelimiter
和m_lineEditDelimiter
既要最初不可见的,我希望自己的知名度与m_checkBoxCsv的状态切换。当它们变得可见时,我希望布局能够垂直扩展以适应它们。
该代码实现了我想要的功能,但它似乎没有为最初隐藏的两个小部件保留空间。当我检查复选框时,它们变得可见,但是所有东西都被缩小以适应它们。
如果我最初看到它们,那么所有事情都按照我想要的方式布置。是否有任何方法可以为这些小部件创建QVBoxLayout预留空间,即使它们最初是不可见的?
如果我不把这个小部件放到QScrollArea中,那么这段代码就像我想要的那样工作。什么是QScrollArea的交易?