QLayout: make its indexOf functions take pointer-to-const

Try to fix an API mistake there: there is no reason why these
functions should take pointers to non-const widgets, as that
actually preventing reasonable code (e.g. finding out the index
of "this" inside a const method of a QWidget subclass).

Unfortunately, indexOf(QWidget*) is also virtual, meaning that
changing its signature is an API break. Hopefully, there are
only few users that override this method (Woboq says 0).

[ChangeLog][Potentially Source-Incompatible Changes]
The QLayout::indexOf(QWidget *) virtual function has changed
signature, becoming QLayout::indexOf(const QWidget *).
This is source incompatible, although the fix (for the few
users that do override indexOf() in their layouts) is
straightforward.

Change-Id: Id2183f5ecd9dc7e2a37c7355266e8494ef7929f2
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
This commit is contained in:
Giuseppe D'Angelo 2020-08-08 02:14:58 +02:00
parent 7ec818e74a
commit 2e7f11246e
2 changed files with 5 additions and 5 deletions

View File

@ -1177,9 +1177,9 @@ QLayoutItem *QLayout::replaceWidget(QWidget *from, QWidget *to, Qt::FindChildOpt
Returns the index of \a widget, or -1 if \a widget is not found.
The default implementation iterates over all items using itemAt()
The default implementation iterates over all items using itemAt().
*/
int QLayout::indexOf(QWidget *widget) const
int QLayout::indexOf(const QWidget *widget) const
{
int i = 0;
QLayoutItem *item = itemAt(i);
@ -1199,7 +1199,7 @@ int QLayout::indexOf(QWidget *widget) const
Returns the index of \a layoutItem, or -1 if \a layoutItem is not found.
*/
int QLayout::indexOf(QLayoutItem *layoutItem) const
int QLayout::indexOf(const QLayoutItem *layoutItem) const
{
int i = 0;
QLayoutItem *item = itemAt(i);

View File

@ -117,8 +117,8 @@ public:
virtual void setGeometry(const QRect&) override;
virtual QLayoutItem *itemAt(int index) const = 0;
virtual QLayoutItem *takeAt(int index) = 0;
virtual int indexOf(QWidget *) const;
QT6_VIRTUAL int indexOf(QLayoutItem *) const;
virtual int indexOf(const QWidget *) const;
virtual int indexOf(const QLayoutItem *) const;
virtual int count() const = 0;
bool isEmpty() const override;
QSizePolicy::ControlTypes controlTypes() const override;