diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-07-12 15:58:02 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-07-12 14:55:59 +0000 |
commit | 141fdff2c59eac4ded9581dd7c6b606bb91197b3 (patch) | |
tree | 2af00e86b0ed7a5bfebc903b11e1518b3b9aa177 | |
parent | d5be2fdb90f02258c60545b69e3247ad0919672c (diff) |
Add QQuickMenu::count
[ChangeLog][Controls][Menu] Added "count" property.
Change-Id: I42971a6bf8fd74b9f2d3df52f191b66cd7022b81
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
-rw-r--r-- | src/quicktemplates2/qquickmenu.cpp | 15 | ||||
-rw-r--r-- | src/quicktemplates2/qquickmenu_p.h | 3 | ||||
-rw-r--r-- | tests/auto/menu/tst_menu.cpp | 30 |
3 files changed, 48 insertions, 0 deletions
diff --git a/src/quicktemplates2/qquickmenu.cpp b/src/quicktemplates2/qquickmenu.cpp index 18997928..68607d33 100644 --- a/src/quicktemplates2/qquickmenu.cpp +++ b/src/quicktemplates2/qquickmenu.cpp @@ -619,7 +619,22 @@ void QQuickMenuPrivate::contentData_clear(QQmlListProperty<QObject> *prop) QQuickMenu::QQuickMenu(QObject *parent) : QQuickPopup(*(new QQuickMenuPrivate), parent) { + Q_D(QQuickMenu); setFocus(true); + connect(d->contentModel, &QQmlObjectModel::countChanged, this, &QQuickMenu::countChanged); +} + +/*! + \since QtQuick.Controls 2.3 (Qt 5.10) + \qmlproperty int QtQuick.Controls::Menu::count + \readonly + + This property holds the number of items. +*/ +int QQuickMenu::count() const +{ + Q_D(const QQuickMenu); + return d->contentModel->count(); } /*! diff --git a/src/quicktemplates2/qquickmenu_p.h b/src/quicktemplates2/qquickmenu_p.h index 9eeeadd6..ec0ded56 100644 --- a/src/quicktemplates2/qquickmenu_p.h +++ b/src/quicktemplates2/qquickmenu_p.h @@ -63,6 +63,7 @@ class QQuickMenuPrivate; class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickMenu : public QQuickPopup { Q_OBJECT + Q_PROPERTY(int count READ count NOTIFY countChanged FINAL REVISION 3) Q_PROPERTY(QVariant contentModel READ contentModel CONSTANT FINAL) Q_PROPERTY(QQmlListProperty<QObject> contentData READ contentData FINAL) Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged FINAL) @@ -75,6 +76,7 @@ class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickMenu : public QQuickPopup public: explicit QQuickMenu(QObject *parent = nullptr); + int count() const; Q_INVOKABLE QQuickItem *itemAt(int index) const; Q_INVOKABLE void addItem(QQuickItem *item); Q_INVOKABLE void insertItem(int index, QQuickItem *item); @@ -124,6 +126,7 @@ protected: void keyPressEvent(QKeyEvent *event) override; Q_SIGNALS: + Q_REVISION(3) void countChanged(); void titleChanged(const QString &title); Q_REVISION(3) void cascadeChanged(bool cascade); Q_REVISION(3) void overlapChanged(); diff --git a/tests/auto/menu/tst_menu.cpp b/tests/auto/menu/tst_menu.cpp index 15969d0b..0fa3a9e8 100644 --- a/tests/auto/menu/tst_menu.cpp +++ b/tests/auto/menu/tst_menu.cpp @@ -64,6 +64,7 @@ public: private slots: void defaults(); + void count(); void mouse(); void pressAndHold(); void contextMenuKeyboard(); @@ -93,6 +94,35 @@ void tst_menu::defaults() QCOMPARE(emptyMenu->isVisible(), false); QCOMPARE(emptyMenu->currentIndex(), -1); QCOMPARE(emptyMenu->contentItem()->property("currentIndex"), QVariant(-1)); + QCOMPARE(emptyMenu->count(), 0); +} + +void tst_menu::count() +{ + QQuickApplicationHelper helper(this, QLatin1String("applicationwindow.qml")); + + QQuickMenu *menu = helper.window->property("emptyMenu").value<QQuickMenu*>(); + QVERIFY(menu); + + QSignalSpy countSpy(menu, &QQuickMenu::countChanged); + QVERIFY(countSpy.isValid()); + + menu->addItem(new QQuickItem); + QCOMPARE(menu->count(), 1); + QCOMPARE(countSpy.count(), 1); + + menu->insertItem(0, new QQuickItem); + QCOMPARE(menu->count(), 2); + QCOMPARE(countSpy.count(), 2); + + menu->removeItem(menu->itemAt(1)); + QCOMPARE(menu->count(), 1); + QCOMPARE(countSpy.count(), 3); + + QQuickItem *item = menu->takeItem(0); + QVERIFY(item); + QCOMPARE(menu->count(), 0); + QCOMPARE(countSpy.count(), 4); } void tst_menu::mouse() |