我有一个不错的小部件,它基本上看起来像一个带有一堆 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]
}
这个过程不会导致整个对话框中显示任何内容,除了左侧的固定滚动条。如果可能的话,使这项工作正常进行的初始化步骤的正确顺序是什么?我的猜测是我可能给了错误的父项或在错误的时间设置了布局,但是到目前为止我尝试过的重新排列都没有奏效......