diff options
-rw-r--r-- | src/imports/calendar/calendar.pro | 2 | ||||
-rw-r--r-- | src/imports/controls/ApplicationWindow.qml | 2 | ||||
-rw-r--r-- | src/imports/controls/RangeSlider.qml | 2 | ||||
-rw-r--r-- | src/imports/controls/controls.pri | 2 | ||||
-rw-r--r-- | src/imports/controls/controls.pro | 2 | ||||
-rw-r--r-- | src/imports/controls/doc/src/qtquickcontrols2-default.qdoc | 2 | ||||
-rw-r--r-- | src/imports/controls/doc/src/qtquickcontrols2-index.qdoc | 18 | ||||
-rw-r--r-- | src/imports/controls/doc/src/qtquickcontrols2-styles.qdoc | 2 | ||||
-rw-r--r-- | src/imports/controls/material/ApplicationWindow.qml | 2 | ||||
-rw-r--r-- | src/imports/controls/universal/ApplicationWindow.qml | 1 | ||||
-rw-r--r-- | src/imports/templates/qtquicktemplates2plugin.cpp | 2 | ||||
-rw-r--r-- | src/quicktemplates2/qquickcontrol.cpp | 39 | ||||
-rw-r--r-- | src/quicktemplates2/qquickcontrol_p_p.h | 1 | ||||
-rw-r--r-- | src/quicktemplates2/qquickscrollview.cpp | 14 | ||||
-rw-r--r-- | tests/auto/revisions/tst_revisions.cpp | 31 | ||||
-rw-r--r-- | tests/auto/snippets/tst_snippets.cpp | 18 | ||||
-rw-r--r-- | tests/benchmarks/objectcount/tst_objectcount.cpp | 86 |
17 files changed, 130 insertions, 96 deletions
diff --git a/src/imports/calendar/calendar.pro b/src/imports/calendar/calendar.pro index 981860b5..039906c1 100644 --- a/src/imports/calendar/calendar.pro +++ b/src/imports/calendar/calendar.pro @@ -17,5 +17,7 @@ SOURCES += \ include(calendar.pri) +!static: CONFIG += qmlcache + CONFIG += no_cxx_module load(qml_plugin) diff --git a/src/imports/controls/ApplicationWindow.qml b/src/imports/controls/ApplicationWindow.qml index 9a81812f..6698fcb3 100644 --- a/src/imports/controls/ApplicationWindow.qml +++ b/src/imports/controls/ApplicationWindow.qml @@ -35,9 +35,9 @@ ****************************************************************************/ import QtQuick 2.9 +import QtQuick.Window 2.3 import QtQuick.Controls 2.3 import QtQuick.Controls.impl 2.3 -import QtQuick.Window 2.2 import QtQuick.Templates 2.3 as T T.ApplicationWindow { diff --git a/src/imports/controls/RangeSlider.qml b/src/imports/controls/RangeSlider.qml index 75c27d91..3a3c2202 100644 --- a/src/imports/controls/RangeSlider.qml +++ b/src/imports/controls/RangeSlider.qml @@ -75,7 +75,7 @@ T.RangeSlider { border.width: activeFocus ? 2 : 1 border.color: control.enabled ? (activeFocus ? Default.focusColor - : (control.first.pressed ? Default.indicatorFramePressedColor : Default.indicatorFrameColor)) : Default.indicatorFrameDisabledColor + : (control.second.pressed ? Default.indicatorFramePressedColor : Default.indicatorFrameColor)) : Default.indicatorFrameDisabledColor color: control.enabled ? (second.pressed ? (activeFocus ? Default.focusPressedColor : Default.indicatorPressedColor) : (activeFocus ? Default.focusLightColor : Default.backgroundColor)) : Default.indicatorDisabledColor diff --git a/src/imports/controls/controls.pri b/src/imports/controls/controls.pri index 5b0f3000..7d23e7ae 100644 --- a/src/imports/controls/controls.pri +++ b/src/imports/controls/controls.pri @@ -2,7 +2,7 @@ HEADERS += \ $$PWD/qquickdefaultbusyindicator_p.h \ $$PWD/qquickdefaultdial_p.h \ $$PWD/qquickdefaultprogressbar_p.h \ - $$PWD/qquickdefaultstyle_p.h \ + $$PWD/qquickdefaultstyle_p.h SOURCES += \ $$PWD/qquickdefaultbusyindicator.cpp \ diff --git a/src/imports/controls/controls.pro b/src/imports/controls/controls.pro index 145b468c..b75e4f56 100644 --- a/src/imports/controls/controls.pro +++ b/src/imports/controls/controls.pro @@ -26,6 +26,8 @@ qtquickcompiler { qmlfiles.prefix = /qt-project.org/imports/QtQuick/Controls.2 qmlfiles.files += $$QML_CONTROLS RESOURCES += qmlfiles +} else:!static { + CONFIG += qmlcache } CONFIG += no_cxx_module diff --git a/src/imports/controls/doc/src/qtquickcontrols2-default.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-default.qdoc index acff6859..ad85b9ec 100644 --- a/src/imports/controls/doc/src/qtquickcontrols2-default.qdoc +++ b/src/imports/controls/doc/src/qtquickcontrols2-default.qdoc @@ -31,7 +31,7 @@ The Default style is a basic all-round style. - The Default style a simple and light-weight style that offers the maximum + The Default style is a simple and light-weight style that offers the maximum performance for Qt Quick Controls 2. It is built with a minimal amount of Qt Quick primitives, and keeps animations and transitions to the minimum. diff --git a/src/imports/controls/doc/src/qtquickcontrols2-index.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-index.qdoc index 66a377bd..703c5d33 100644 --- a/src/imports/controls/doc/src/qtquickcontrols2-index.qdoc +++ b/src/imports/controls/doc/src/qtquickcontrols2-index.qdoc @@ -133,18 +133,18 @@ \li ... \endtable - \section1 Important Concepts in Qt Quick Controls 2 + \section1 Topics \list - \li \l{Qt Quick Controls 2 Guidelines} - \li \l{Styling Qt Quick Controls 2} - \li \l{Customizing Qt Quick Controls 2} - \li \l{High-DPI Support in Qt Quick Controls 2} - \li \l{Using File Selectors with Qt Quick Controls 2} + \li \l{Qt Quick Controls 2 Guidelines}{Guidelines} + \li \l{Styling Qt Quick Controls 2}{Styling} + \li \l{Customizing Qt Quick Controls 2}{Customization} + \li \l{High-DPI Support in Qt Quick Controls 2}{High-DPI Support} + \li \l{Using File Selectors with Qt Quick Controls 2}{Using File Selectors} + \li \l{Deploying Qt Quick Controls 2 Applications}{Deployment} + \li \l{Qt Quick Controls 2 Configuration File}{Configuration File} + \li \l{Supported Environment Variables in Qt Quick Controls 2}{Environment Variables} \li \l{Differences between Qt Quick Controls} - \li \l{Deploying Qt Quick Controls 2 Applications} - \li \l{Qt Quick Controls 2 Configuration File} - \li \l{Supported Environment Variables in Qt Quick Controls 2} \endlist \section1 Reference diff --git a/src/imports/controls/doc/src/qtquickcontrols2-styles.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-styles.qdoc index 9f942634..42d8bc62 100644 --- a/src/imports/controls/doc/src/qtquickcontrols2-styles.qdoc +++ b/src/imports/controls/doc/src/qtquickcontrols2-styles.qdoc @@ -138,7 +138,7 @@ \li \l {Default Style} \li \l {Material Style} \li \l {Universal Style} - \li \l{Using File Selectors with Qt Quick Controls 2} + \li \l {Using File Selectors with Qt Quick Controls 2} \li \l {Deploying Qt Quick Controls 2 Applications} \li \l {Qt Quick Controls 2 Configuration File} \li \l {Supported Environment Variables in Qt Quick Controls 2} diff --git a/src/imports/controls/material/ApplicationWindow.qml b/src/imports/controls/material/ApplicationWindow.qml index 14dd4637..45f1b59a 100644 --- a/src/imports/controls/material/ApplicationWindow.qml +++ b/src/imports/controls/material/ApplicationWindow.qml @@ -35,7 +35,7 @@ ****************************************************************************/ import QtQuick 2.9 -import QtQuick.Window 2.2 +import QtQuick.Window 2.3 import QtQuick.Templates 2.3 as T import QtQuick.Controls.Material 2.3 diff --git a/src/imports/controls/universal/ApplicationWindow.qml b/src/imports/controls/universal/ApplicationWindow.qml index e359b1bf..c9bd4cec 100644 --- a/src/imports/controls/universal/ApplicationWindow.qml +++ b/src/imports/controls/universal/ApplicationWindow.qml @@ -35,6 +35,7 @@ ****************************************************************************/ import QtQuick 2.9 +import QtQuick.Window 2.3 import QtQuick.Templates 2.3 as T import QtQuick.Controls.Universal 2.3 import QtQuick.Controls.Universal.impl 2.3 diff --git a/src/imports/templates/qtquicktemplates2plugin.cpp b/src/imports/templates/qtquicktemplates2plugin.cpp index e9f21378..9f74a012 100644 --- a/src/imports/templates/qtquicktemplates2plugin.cpp +++ b/src/imports/templates/qtquicktemplates2plugin.cpp @@ -216,6 +216,7 @@ void QtQuickTemplates2Plugin::registerTypes(const char *uri) qmlRegisterRevision<QQuickTextInput, 7>(uri, 2, 0); qmlRegisterRevision<QQuickTextEdit, 7>(uri, 2, 0); qmlRegisterRevision<QQuickWindow, 2>(uri, 2, 0); + qmlRegisterRevision<QWindow, 3>(uri, 2, 0); // QtQuick.Templates 2.1 (new types and revisions in Qt 5.8) qmlRegisterType<QQuickButtonGroup, 1>(uri, 2, 1, "ButtonGroup"); @@ -263,6 +264,7 @@ void QtQuickTemplates2Plugin::registerTypes(const char *uri) // make revisioned properties available to their subclasses (synced with Qt 5.9) qmlRegisterRevision<QQuickText, 9>(uri, 2, 2); qmlRegisterRevision<QQuickTextInput, 9>(uri, 2, 2); + qmlRegisterRevision<QQuickWindowQmlImpl, 2>(uri, 2, 2); // QtQuick.Templates 2.3 (new types and revisions in Qt 5.10) qmlRegisterType<QQuickAbstractButton, 3>(uri, 2, 3, "AbstractButton"); diff --git a/src/quicktemplates2/qquickcontrol.cpp b/src/quicktemplates2/qquickcontrol.cpp index fc0b1b17..d285fdd2 100644 --- a/src/quicktemplates2/qquickcontrol.cpp +++ b/src/quicktemplates2/qquickcontrol.cpp @@ -281,6 +281,27 @@ QQuickItem *QQuickControlPrivate::getContentItem() return contentItem; } +void QQuickControlPrivate::setContentItem_helper(QQuickItem *item, bool notify) +{ + Q_Q(QQuickControl); + if (contentItem == item) + return; + + q->contentItemChange(item, contentItem); + destroyDelegate(contentItem, q); + contentItem = item; + + if (item) { + if (!item->parentItem()) + item->setParentItem(q); + if (componentComplete) + resizeContent(); + } + + if (notify) + emit q->contentItemChanged(); +} + #if QT_CONFIG(accessibility) void QQuickControlPrivate::accessibilityActiveChanged(bool active) { @@ -1176,25 +1197,15 @@ void QQuickControl::setBackground(QQuickItem *background) QQuickItem *QQuickControl::contentItem() const { QQuickControlPrivate *d = const_cast<QQuickControlPrivate *>(d_func()); - return d->getContentItem(); + if (!d->contentItem) + d->setContentItem_helper(d->getContentItem(), false); + return d->contentItem; } void QQuickControl::setContentItem(QQuickItem *item) { Q_D(QQuickControl); - if (d->contentItem == item) - return; - - contentItemChange(item, d->contentItem); - QQuickControlPrivate::destroyDelegate(d->contentItem, this); - d->contentItem = item; - if (item) { - if (!item->parentItem()) - item->setParentItem(this); - if (isComponentComplete()) - d->resizeContent(); - } - emit contentItemChanged(); + d->setContentItem_helper(item, true); } void QQuickControl::classBegin() diff --git a/src/quicktemplates2/qquickcontrol_p_p.h b/src/quicktemplates2/qquickcontrol_p_p.h index 3cd04b17..7ff9dff3 100644 --- a/src/quicktemplates2/qquickcontrol_p_p.h +++ b/src/quicktemplates2/qquickcontrol_p_p.h @@ -95,6 +95,7 @@ public: virtual void resizeContent(); virtual QQuickItem *getContentItem(); + void setContentItem_helper(QQuickItem *item, bool notify = true); #if QT_CONFIG(accessibility) void accessibilityActiveChanged(bool active) override; diff --git a/src/quicktemplates2/qquickscrollview.cpp b/src/quicktemplates2/qquickscrollview.cpp index fc763511..c05e4848 100644 --- a/src/quicktemplates2/qquickscrollview.cpp +++ b/src/quicktemplates2/qquickscrollview.cpp @@ -108,7 +108,7 @@ public: QQuickItem *getContentItem() override; - QQuickFlickable *ensureFlickable(); + QQuickFlickable *ensureFlickable(bool content); bool setFlickable(QQuickFlickable *flickable, bool content); void updateContentWidth(); @@ -146,14 +146,14 @@ QQuickScrollViewPrivate::QQuickScrollViewPrivate() QQuickItem *QQuickScrollViewPrivate::getContentItem() { - return ensureFlickable(); + return ensureFlickable(false); } -QQuickFlickable *QQuickScrollViewPrivate::ensureFlickable() +QQuickFlickable *QQuickScrollViewPrivate::ensureFlickable(bool content) { Q_Q(QQuickScrollView); if (!flickable) - setFlickable(new QQuickFlickable(q), true); + setFlickable(new QQuickFlickable(q), content); return flickable; } @@ -271,7 +271,7 @@ void QQuickScrollViewPrivate::contentData_append(QQmlListProperty<QObject> *prop if (!p->flickable && p->setFlickable(qobject_cast<QQuickFlickable *>(obj), true)) return; - QQuickFlickable *flickable = p->ensureFlickable(); + QQuickFlickable *flickable = p->ensureFlickable(true); Q_ASSERT(flickable); QQmlListProperty<QObject> data = flickable->flickableData(); data.append(&data, obj); @@ -313,7 +313,7 @@ void QQuickScrollViewPrivate::contentChildren_append(QQmlListProperty<QQuickItem if (!p->flickable) p->setFlickable(qobject_cast<QQuickFlickable *>(item), true); - QQuickFlickable *flickable = p->ensureFlickable(); + QQuickFlickable *flickable = p->ensureFlickable(true); Q_ASSERT(flickable); QQmlListProperty<QQuickItem> children = flickable->flickableChildren(); children.append(&children, item); @@ -552,7 +552,7 @@ void QQuickScrollView::componentComplete() Q_D(QQuickScrollView); QQuickControl::componentComplete(); if (!d->contentItem) - d->ensureFlickable(); + d->ensureFlickable(true); } void QQuickScrollView::contentItemChange(QQuickItem *newItem, QQuickItem *oldItem) diff --git a/tests/auto/revisions/tst_revisions.cpp b/tests/auto/revisions/tst_revisions.cpp index 8a7a5d6e..606cea33 100644 --- a/tests/auto/revisions/tst_revisions.cpp +++ b/tests/auto/revisions/tst_revisions.cpp @@ -46,6 +46,9 @@ class tst_revisions : public QObject private slots: void revisions_data(); void revisions(); + + void window_data(); + void window(); }; void tst_revisions::revisions_data() @@ -77,6 +80,34 @@ void tst_revisions::revisions() QVERIFY2(!object.isNull(), qPrintable(component.errorString())); } +void tst_revisions::window_data() +{ + QTest::addColumn<int>("revision"); + QTest::addColumn<QString>("qml"); + QTest::addColumn<QString>("error"); + + // Qt 5.7: 2.0, Qt 5.8: 2.1 + for (int i = 0; i <= 1; ++i) + QTest::newRow(qPrintable(QString("screen:2.%1").arg(i))) << i << "screen: null" << QString(":1 \"ApplicationWindow.screen\" is not available in QtQuick.Templates 2.%1").arg(i); + + // Qt 5.9: 2.2, Qt 5.10: 2.3... + for (int i = 2; i <= QT_VERSION_MINOR - 7; ++i) + QTest::newRow(qPrintable(QString("screen:2.%1").arg(i))) << i << "screen: null" << ""; +} + +void tst_revisions::window() +{ + QFETCH(int, revision); + QFETCH(QString, qml); + QFETCH(QString, error); + + QQmlEngine engine; + QQmlComponent component(&engine); + component.setData(QString("import QtQuick.Templates 2.%1; ApplicationWindow { %2 }").arg(revision).arg(qml).toUtf8(), QUrl()); + QScopedPointer<QObject> window(component.create()); + QCOMPARE(window.isNull(), !error.isEmpty()); +} + QTEST_MAIN(tst_revisions) #include "tst_revisions.moc" diff --git a/tests/auto/snippets/tst_snippets.cpp b/tests/auto/snippets/tst_snippets.cpp index 1185bde9..852c98e9 100644 --- a/tests/auto/snippets/tst_snippets.cpp +++ b/tests/auto/snippets/tst_snippets.cpp @@ -113,11 +113,23 @@ void tst_Snippets::verify() if (takeScreenshots) { const QString currentDataTag = QLatin1String(QTest::currentDataTag()); - static const QString currentStyle = QQuickStyle::name(); + static const QString applicationStyle = QQuickStyle::name().isEmpty() ? "Default" : QQuickStyle::name(); static const QStringList availableStyles = QQuickStyle::availableStyles(); + + bool isStyledSnippet = false; + const QString snippetStyle = currentDataTag.section("-", 1, 1); for (const QString &availableStyle : availableStyles) { - if (currentStyle != availableStyle && currentDataTag.startsWith("qtquickcontrols2-" + availableStyle.toLower() + "-")) - QSKIP(qPrintable(QString("Not running with the %1 style").arg(availableStyle))); + if (!snippetStyle.compare(availableStyle, Qt::CaseInsensitive)) { + if (applicationStyle != availableStyle) + QSKIP(qPrintable(QString("%1 style specific snippet. Running with the %2 style.").arg(availableStyle, applicationStyle))); + isStyledSnippet = true; + } + } + + if (!isStyledSnippet && !applicationStyle.isEmpty()) { + int index = output.indexOf("-", output.lastIndexOf("/")); + if (index != -1) + output.insert(index, "-" + applicationStyle.toLower()); } QQuickWindow *window = qobject_cast<QQuickWindow *>(root); diff --git a/tests/benchmarks/objectcount/tst_objectcount.cpp b/tests/benchmarks/objectcount/tst_objectcount.cpp index 7f0610ac..d12f3293 100644 --- a/tests/benchmarks/objectcount/tst_objectcount.cpp +++ b/tests/benchmarks/objectcount/tst_objectcount.cpp @@ -61,17 +61,11 @@ private slots: void init(); void cleanup(); - void calendar(); - void calendar_data(); + void qobjects(); + void qobjects_data(); - void controls(); - void controls_data(); - - void material(); - void material_data(); - - void universal(); - void universal_data(); + void qquickitems(); + void qquickitems_data(); private: QQmlEngine engine; @@ -94,17 +88,6 @@ void tst_ObjectCount::cleanup() qtHookData[QHooks::RemoveQObject] = 0; } -static void printItems(const QList<QQuickItem *> &items) -{ - std::cout << "RESULT tst_ObjectCount::" << QTest::currentTestFunction() << "():\"" << QTest::currentDataTag() << "\":" << std::endl; - std::cout << " QQuickItems: " << items.count() << " (total of QObjects: " << qt_qobjects->count() << ")" << std::endl; - - if (qt_verbose) { - for (QObject *object : qAsConst(*qt_qobjects)) - qInfo() << "\t" << object; - } -} - static void addTestRows(QQmlEngine *engine, const QString &sourcePath, const QString &targetPath, const QStringList &skiplist = QStringList()) { // We cannot use QQmlComponent to load QML files directly from the source tree. @@ -138,6 +121,14 @@ static void addTestRows(QQmlEngine *engine, const QString &sourcePath, const QSt } } +static void initTestRows(QQmlEngine *engine) +{ + addTestRows(engine, "controls", "QtQuick/Controls.2", QStringList() << "CheckIndicator" << "RadioIndicator" << "SwitchIndicator"); + addTestRows(engine, "controls/material", "QtQuick/Controls.2/Material", QStringList() << "Ripple" << "SliderHandle" << "CheckIndicator" << "RadioIndicator" << "SwitchIndicator" << "BoxShadow" << "ElevationEffect" << "CursorDelegate"); + addTestRows(engine, "controls/universal", "QtQuick/Controls.2/Universal", QStringList() << "CheckIndicator" << "RadioIndicator" << "SwitchIndicator"); +} + +template <typename T> static void doBenchmark(QQmlEngine *engine, const QUrl &url) { QQmlComponent component(engine); @@ -148,61 +139,42 @@ static void doBenchmark(QQmlEngine *engine, const QUrl &url) QScopedPointer<QObject> object(component.create()); QVERIFY2(object.data(), qPrintable(component.errorString())); - QList<QQuickItem *> items; - for (QObject *object : qAsConst(*qt_qobjects)) { - QQuickItem *item = qobject_cast<QQuickItem *>(object); - if (item) - items += item; + QObjectList objects; + for (QObject *object : qAsConst(*qt_qobjects())) { + if (qobject_cast<T *>(object)) + objects += object; } - printItems(items); -} -void tst_ObjectCount::calendar() -{ - QFETCH(QUrl, url); - doBenchmark(&engine, url); -} - -void tst_ObjectCount::calendar_data() -{ - QTest::addColumn<QUrl>("url"); - addTestRows(&engine, "calendar", "Qt/labs/calendar"); -} - -void tst_ObjectCount::controls() -{ - QFETCH(QUrl, url); - doBenchmark(&engine, url); -} + if (qt_verbose) { + for (QObject *object : objects) + qInfo() << "\t" << object; + } -void tst_ObjectCount::controls_data() -{ - QTest::addColumn<QUrl>("url"); - addTestRows(&engine, "controls", "QtQuick/Controls.2", QStringList() << "CheckIndicator" << "RadioIndicator" << "SwitchIndicator"); + QTest::setBenchmarkResult(objects.count(), QTest::Events); } -void tst_ObjectCount::material() +void tst_ObjectCount::qobjects() { QFETCH(QUrl, url); - doBenchmark(&engine, url); + doBenchmark<QObject>(&engine, url); } -void tst_ObjectCount::material_data() +void tst_ObjectCount::qobjects_data() { QTest::addColumn<QUrl>("url"); - addTestRows(&engine, "controls/material", "QtQuick/Controls.2/Material", QStringList() << "Ripple" << "SliderHandle" << "CheckIndicator" << "RadioIndicator" << "SwitchIndicator" << "BoxShadow" << "ElevationEffect" << "CursorDelegate"); + initTestRows(&engine); } -void tst_ObjectCount::universal() +void tst_ObjectCount::qquickitems() { QFETCH(QUrl, url); - doBenchmark(&engine, url); + doBenchmark<QQuickItem>(&engine, url); } -void tst_ObjectCount::universal_data() +void tst_ObjectCount::qquickitems_data() { QTest::addColumn<QUrl>("url"); - addTestRows(&engine, "controls/universal", "QtQuick/Controls.2/Universal", QStringList() << "CheckIndicator" << "RadioIndicator" << "SwitchIndicator"); + initTestRows(&engine); } QTEST_MAIN(tst_ObjectCount) |