Я использую QVBoxLayout для организации вертикального стека виджетов. QVBoxLayout содержится в QScrollArea. Я хочу, чтобы некоторые виджеты были изначально скрыты и показывались только при установленном флажке. Вот пример кода, который я использую.
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?