#ifndef GRIDFLOWLAYOUT_H #define GRIDFLOWLAYOUT_H #include <QLayout> #include <QList> #include <QVector> class GridFlowLayout : public QLayout { QList<QLayoutItem*> items; QVector<int> widths; QVector<int> heights; public: GridFlowLayout(QWidget* parent); void addItem (QLayoutItem* item) override; QLayoutItem* itemAt (int index) const override; QLayoutItem* takeAt (int index) override; bool hasHeightForWidth (void) const override; int heightForWidth (int width) const override; int count (void) const override; Qt::Orientations expandingDirections (void) const override; QSize minimumSize (void) const override; QSize sizeHint (void) const override; void setGeometry (const QRect& rect) override; private: void applyLayout (int rows, const QVector<QSize>& sizeHints, const QRect& area); void calculateRows (int rows, const QVector<QSize>& sizeHints); bool checkRows (int rows, const QRect& rect, const QVector<QSize>& sizeHints); }; #endif // GRIDFLOWLAYOUT_H