diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp
index 3001e23d5dc65a2e202b21562417130d93c418a3..668436c1a22b8751e8ab385ce1d6089c498fc8a9 100644
--- a/src/widgets/graphicsview/qgraphicsitem.cpp
+++ b/src/widgets/graphicsview/qgraphicsitem.cpp
@@ -7186,7 +7186,7 @@ void QGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
 */
 void QGraphicsItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
 {
-    if (flags() & ItemIsSelectable) {
+    if (event->button() == Qt::LeftButton && (flags() & ItemIsSelectable)) {
         bool multiSelect = (event->modifiers() & Qt::ControlModifier) != 0;
         if (event->scenePos() == event->buttonDownScenePos(Qt::LeftButton)) {
             // The item didn't move
diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
index 37190c3cf2f9310a1d4b1cf6698f9eaaecb42ff9..3e2425773611d20c3f2eae12fa964fd24f69d317 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -470,6 +470,7 @@ private slots:
     void QTBUG_13473_sceneposchange();
     void QTBUG_16374_crashInDestructor();
     void QTBUG_20699_focusScopeCrash();
+    void QTBUG_30990_rightClickSelection();
 
 private:
     QList<QGraphicsItem *> paintedItems;
@@ -11468,5 +11469,32 @@ void tst_QGraphicsItem::QTBUG_20699_focusScopeCrash()
     fs.setFocus();
 }
 
+void tst_QGraphicsItem::QTBUG_30990_rightClickSelection()
+{
+    QGraphicsScene scene;
+    QGraphicsItem *item1 = scene.addRect(10, 10, 10, 10);
+    item1->setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable);
+    QGraphicsItem *item2 = scene.addRect(100, 100, 10, 10);
+    item2->setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable);
+
+    // right mouse press & release over an item should not make it selected
+    sendMousePress(&scene, item1->boundingRect().center(), Qt::RightButton);
+    QVERIFY(!item1->isSelected());
+    sendMouseRelease(&scene, item1->boundingRect().center(), Qt::RightButton);
+    QVERIFY(!item1->isSelected());
+
+    // right mouse press over one item, moving over another item,
+    // and then releasing should make neither of the items selected
+    sendMousePress(&scene, item1->boundingRect().center(), Qt::RightButton);
+    QVERIFY(!item1->isSelected());
+    QVERIFY(!item2->isSelected());
+    sendMouseMove(&scene, item2->boundingRect().center(), Qt::RightButton);
+    QVERIFY(!item1->isSelected());
+    QVERIFY(!item2->isSelected());
+    sendMouseRelease(&scene, item2->boundingRect().center(), Qt::RightButton);
+    QVERIFY(!item1->isSelected());
+    QVERIFY(!item2->isSelected());
+}
+
 QTEST_MAIN(tst_QGraphicsItem)
 #include "tst_qgraphicsitem.moc"