Details
-
Bug
-
Resolution: Done
-
P2: Important
-
None
-
5.15
-
None
-
-
c3fd24164b062de3d874b43c6c807245248c2042 (qt/qtbase/dev)
Description
QSplitter ignores QSizePolicy::Maximum (or rather lack of QSizePolicy::GrowFlag) in computing initial sizes as well as in resizing. It does take QWidget::maximumSize, although that is more cumbersome as it is not a virtual method/property.
#include <QApplication> #include <QSplitter> #include <QFrame> class Frame: public QFrame { public: Frame() { setFrameStyle(QFrame::StyledPanel); } QSize sizeHint() const override { return QSize(100, 100); } }; int main(int argc, char *argv[]) { QApplication a(argc, argv); QSplitter splitter(Qt::Horizontal); Frame *f1 = new Frame(); Frame *f2 = new Frame(); Frame *f3 = new Frame(); f2->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Ignored); // f2->setMaximumWidth(100); splitter.addWidget(f1); splitter.addWidget(f2); splitter.addWidget(f3); splitter.resize(500, 200); splitter.show(); return a.exec(); }
The attached screenshot pairs show a initial splitter layout with `QSizePolicy::Maximum` only, and one with `setMaximumWith(100)`. The other pair show the splitter layout after dragging the second handle to the right. With `setMaximumWidth`, the middle portion does not grow, but with `QSizePolicy::Maximum` only it does.