У меня есть хороший виджет, который в основном выглядит как диалоговое окно с кучей QSlider'ов на нем. Количество ползунков варьируется в зависимости от ситуации, когда вызывается диалог (не фактический QDialog; просто QWidget).
Поскольку разное количество ползунков приводит к тому, что поле в разное время может иметь разные размеры, теперь я хочу немного очистить ситуацию, ограничив ползунки областью QScrollArea. Если я правильно понимаю, такая область прокрутки будет отображать столько ползунков, сколько умещается в ее высоте, и можно было бы прокрутить вниз, чтобы увидеть остальные, если бы их было больше.
Во всяком случае, я попробовал (несколько сложную) процедуру вроде этого:
В конструкторе пользовательского класса QWidget (m_variableName = переменная-член):
CustomScrollBox::CustomScrollBox(QWidget* _parent){
setWindowTitle(...);
...
m_scrollArea = new QScrollArea(this);
m_scrollAreaBox = new QGroupBox(m_scrollArea);
m_layout = new QGridLayout();
m_scrollAreaBox->setLayout(m_layout);
m_scrollArea->setWidget(m_scrollAreaBox);
m_scrollArea->setFixedHeight(250);
m_bottomButton = new QPushButton(this); //probably irrelevant
...
[connect calls, etc.]
}
После конструктора происходит настоящая, зависящая от ситуации установка ползунков:
void
CustomScrollBox::SetUpWidgets(){
for([however many sliders the situation calls for]){
CustomSlider* s = new CustomSlider(this, label); //just a QWidget consisting of a
//QSlider and a QLabel to
//the left of it
..
m_layout->addWidget(s, [grid dimensions as needed]);
}
...
[set text on bottom button, etc., and add it as well]
}
В результате этого процесса в общем диалоговом окне ничего не отображается, кроме неподвижной полосы прокрутки слева. Каков правильный порядок шагов инициализации, если возможно, чтобы эта работа работала? Я предполагаю, что я мог указать что-то не тому родителю или установить макет не в то время, но перегруппировки, которые я пробовал до сих пор, не сработали ...