aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2015-11-19 07:46:01 +0100
committerLiang Qi <liang.qi@theqtcompany.com>2015-12-07 19:42:58 +0000
commita2d154022ddd585fd4ed4cd9e1d1a00ddee3bf5c (patch)
treeb16de997d48621a1a39cabf66073a653413d3297
parent72e889d12f9df162a22c39204c8333c5f4808da8 (diff)
QQuickItem: added isAncestorOf()
[ChangeLog][QtQuick][QQuickItem] added isAncestorOf() Change-Id: I9f6e0574db787c6c9d2311223c6a3ae7fd820bab Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
-rw-r--r--src/quick/items/qquickitem.cpp20
-rw-r--r--src/quick/items/qquickitem.h2
-rw-r--r--tests/auto/quick/qquickitem2/tst_qquickitem.cpp38
3 files changed, 60 insertions, 0 deletions
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp
index b89482fb90..ae7b197619 100644
--- a/src/quick/items/qquickitem.cpp
+++ b/src/quick/items/qquickitem.cpp
@@ -6825,6 +6825,26 @@ QQuickItem *QQuickItem::scopedFocusItem() const
}
/*!
+ Returns \c true if this item is an ancestor of \a child (i.e., if this item
+ is \a child's parent, or one of \a child's parent's ancestors).
+
+ \since 5.7
+
+ \sa parentItem()
+ */
+bool QQuickItem::isAncestorOf(const QQuickItem *child) const
+{
+ if (!child || child == this)
+ return false;
+ const QQuickItem *ancestor = child;
+ while ((ancestor = ancestor->parentItem())) {
+ if (ancestor == this)
+ return true;
+ }
+ return false;
+}
+
+/*!
Returns the mouse buttons accepted by this item.
The default value is Qt::NoButton; that is, no mouse buttons are accepted.
diff --git a/src/quick/items/qquickitem.h b/src/quick/items/qquickitem.h
index d92910ce9c..50d691b1b6 100644
--- a/src/quick/items/qquickitem.h
+++ b/src/quick/items/qquickitem.h
@@ -278,6 +278,8 @@ public:
bool isFocusScope() const;
QQuickItem *scopedFocusItem() const;
+ bool isAncestorOf(const QQuickItem *child) const;
+
Qt::MouseButtons acceptedMouseButtons() const;
void setAcceptedMouseButtons(Qt::MouseButtons buttons);
bool acceptHoverEvents() const;
diff --git a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp
index c7717b9cca..518e248207 100644
--- a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp
+++ b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp
@@ -117,6 +117,7 @@ private slots:
void contains_data();
void contains();
void childAt();
+ void isAncestorOf();
void grab();
@@ -2959,6 +2960,43 @@ void tst_QQuickItem::grab()
}
+void tst_QQuickItem::isAncestorOf()
+{
+ QQuickItem parent;
+
+ QQuickItem sub1;
+ sub1.setParentItem(&parent);
+
+ QQuickItem child1;
+ child1.setParentItem(&sub1);
+ QQuickItem child2;
+ child2.setParentItem(&sub1);
+
+ QQuickItem sub2;
+ sub2.setParentItem(&parent);
+
+ QQuickItem child3;
+ child3.setParentItem(&sub2);
+ QQuickItem child4;
+ child4.setParentItem(&sub2);
+
+ QVERIFY(parent.isAncestorOf(&sub1));
+ QVERIFY(parent.isAncestorOf(&sub2));
+ QVERIFY(parent.isAncestorOf(&child1));
+ QVERIFY(parent.isAncestorOf(&child2));
+ QVERIFY(parent.isAncestorOf(&child3));
+ QVERIFY(parent.isAncestorOf(&child4));
+ QVERIFY(sub1.isAncestorOf(&child1));
+ QVERIFY(sub1.isAncestorOf(&child2));
+ QVERIFY(!sub1.isAncestorOf(&child3));
+ QVERIFY(!sub1.isAncestorOf(&child4));
+ QVERIFY(sub2.isAncestorOf(&child3));
+ QVERIFY(sub2.isAncestorOf(&child4));
+ QVERIFY(!sub2.isAncestorOf(&child1));
+ QVERIFY(!sub2.isAncestorOf(&child2));
+ QVERIFY(!sub1.isAncestorOf(&sub1));
+ QVERIFY(!sub2.isAncestorOf(&sub2));
+}
QTEST_MAIN(tst_QQuickItem)