Qt Quick Controls 2
mitchcurtis QQuickPopupPositioner: avoid adding duplicate item change listeners
The issue is that QQuickPopupPositioner::setParentItem() is called when
the delegate has been created and assigned to the Repeater, then the
ancestor listeners are added, and then straight after that, the
benchmark item itself is parented to benchmarkRoot, which causes
QQuickPopupPositioner::itemParentChanged() to be called, which adds a
single ancestor listener: the QQuickRootItem (which was just added
previously as a result of QQuickPopupPositioner::setParentItem()
being called).

The item could be arbitrarily high up in the ancestry tree, so there's
no nice (i.e. fast) way of checking for duplicates in Controls 2
itself. Instead, use the new
QQuickItemPrivate::updateOrAddItemChangeListener() function which only
adds the listener if it doesn't already exist.

This avoids a heap-use-after-free in qmlbench when creating Menus.

Task-number: QTBUG-70729
Change-Id: I0efaa10167c4c9a9c4c1b65a5c34e683c3ec5732
Fixes: QTBUG-70729
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Latest commit d56c193 Sep 26, 2018

README.md

Qt Quick Controls 2

Qt Quick Controls 2 Styles

The Qt Quick Controls 2 module delivers the next generation user interface controls based on Qt Quick. In comparison to the desktop-oriented Qt Quick Controls 1, Qt Quick Controls 2 are an order of magnitude simpler, lighter and faster, and are primarily targeted towards embedded and mobile platforms.

Qt Quick Controls 2 are based on a flexible template system that enables rapid development of entire custom styles and user experiences. Qt Quick Controls 2 comes with a selection of built-in styles:

  • Default style - a simple and minimal all-round style that offers the maximum performance
  • Fusion style - a platform-agnostic style that offers a desktop-oriented look'n'feel
  • Imagine style - a designer-friendly style based on image assets
  • Material style - a style based on the Google Material Design Guidelines
  • Universal style - a style based on the Microsoft Universal Design Guidelines

More information can be found in the following blog posts:

Help

If you have problems or questions, don't hesitate to:

Installation

The MINIMUM REQUIREMENT for building this project is to use the same branch of Qt 5. The dependencies are qtbase, qtxmlpatterns and qtdeclarative.

To install the controls into your Qt directory (QTDIR/qml):

qmake
make
make install

If you are compiling against a system Qt on Linux, you might have to use sudo make install to install the project.

Usage

Please refer to the Getting Started with Qt Quick Controls 2 documentation.