QSplitter具有一个固定大小的小部件和一个可变大小的小部件?
问题描述:
是否有可能有一个QSplitter
有一个固定大小的部件和另一个具有可变大小?QSplitter具有一个固定大小的小部件和一个可变大小的小部件?
此代码设置正确的事情,但是当调整窗口大小拆分成比例地改变初始大小的小部件:
vSplitter = new QSplitter(Qt::Vertical, this);
vSplitter->addWidget(widget1);
vSplitter->addWidget(widget2);
QList<int> heights;
heights.push_back(550);
heights.push_back(1000);
vSplitter->setSizes(heights);
setCentralWidget(vSplitter);
谢谢。
答
试试这个:
QSplitter::setStretchFactor (int index, int stretch)
只需设置要保持固定的大小为0,并将其设置为1的其他插件的部分的拉伸因子。
当调整整个窗口的大小时,具有拉伸系数0的小部件将不会调整大小。
答
我正在尝试做类似的事情。我有一个固定小部件(顶部)和一个非固定小部件(底部)。我希望用户能够正常使用分离器句柄,但我不希望窗口大小调整为固定小部件添加空间。在两个小部件上使用setSizePolicy对我来说都不起作用,并且在一个或两个小部件上都没有使用setStretchFactor。
我最终创建了QSplitter的子类,以便我可以实现resizeEvent,它可以在拆分器调整大小后移动拆分器。此代码假定: 只有两个小部件。 顶部[0]是可调整大小的,底部[1]不应该是。
下面是我写的resizeEvent:
MySplitter::resizeEvent(QResizeEvent *event) {
/* The first resizeEvent is -1 for height and width, because it was
invisible before. */
if (event->oldSize().height() != -1) {
int diff;
QList<int> previousSizes = sizes();
QSplitter::resizeEvent(event);
QList<int> newSizes = sizes();
/* The bottom widget is the fixed one, so find out if that is to
grow or shrink. */
diff = newSizes[1] - previousSizes[1];
if (diff > 0) {
/* Keep the bottom from growing by giving the size to the top. */
newSizes[0] += diff;
newSizes[1] -= diff;
}
else {
/* Steal size from the top to keep it from shrinking. */
newSizes[0] -= diff;
newSizes[1] += diff;
}
setSizes(newSizes);
}
else
QSplitter::resizeEvent(event);
}