diff --cc src/datavisualization/qml/qquickdatavisbars.cpp index 87f18944,08debeb7..00000000 --- a/src/datavisualization/qml/qquickdatavisbars.cpp +++ b/src/datavisualization/qml/qquickdatavisbars.cpp @@@ -592,43 -592,44 +592,47 @@@ void QQuickDataVisBars::handleMousePres if (Qt::LeftButton == event->button()) { auto mousePos = event->pos(); auto pickResult = pickAll(mousePos.x(), mousePos.y()); -- QVector3D pickedPos(0.0f, 0.0f, 0.0f); - QQuick3DModel *model; ++ //QVector3D pickedPos(0.0f, 0.0f, 0.0f); ++ QQuick3DModel *model = nullptr; auto selectionMode = m_barsController->selectionMode(); if (!selectionMode.testFlag(QAbstract3DGraph::SelectionNone)) { for (auto picked : pickResult) { if (picked.objectHit()->objectName().contains(QStringLiteral("BarModel"))) { -- pickedPos = picked.scenePosition(); ++ //pickedPos = picked.scenePosition(); + model = picked.objectHit(); break; } } -- if (!pickedPos.isNull()) { ++ if (model/*!pickedPos.isNull()*/) { float min = pickResult.at(0).distance(); for (auto it = m_barModelsMap.begin(); it != m_barModelsMap.end(); it++) { if (!it.key()->isVisible()) continue; - QVector barList = *it.value(); - for (int i = 0; i < barList.count(); i++) { - QVector3D pos = barList.at(i)->model->position(); - float dist = pickedPos.distanceToPoint(pos); - if (model == barList.at(i)->model/*m_selectedBarPos.isNull() || dist < min*/) { - min = dist; + for (int i = 0; i < it.value()->count(); i++) { + QVector3D pos = it.value()->at(i)->model->position(); - float dist = pickedPos.distanceToPoint(pos); - if (m_selectedBarPos.isNull() || dist < min) { - min = dist; ++ //float dist = pickedPos.distanceToPoint(pos); ++ if (model == it.value()->at(i)->model/*m_selectedBarPos.isNull() || dist < min*/) { ++ //min = dist; m_selectedBarSeries = it.key(); - m_selectedBarCoord = barList.at(i)->coord; + m_selectedBarCoord = it.value()->at(i)->coord; m_selectedBarPos = pos; m_selectedIndex = i; } } - if (selectionMode == QAbstract3DGraph::SelectionItem) { - if (!m_selectedBarPos.isNull()) { - m_selectedBarSeries->setSelectedBar(m_selectedBarCoord); ++ if (selectionMode == QAbstract3DGraph::SelectionItem && m_selectedBarSeries) { + if (!m_selectedBarPos.isNull()) + m_selectedBarSeries->setSelectedBar(m_selectedBarCoord); + else + m_selectedBarSeries->setSelectedBar(m_barsController->invalidSelectionPosition()); + m_barSelectionFound = true; m_barsController->m_changeTracker.selectedBarChanged = true; + } else if (m_selectedBarSeries) { + m_selectedBarSeries->setSelectedBar(m_barsController->invalidSelectionPosition()); } } } else { diff --git a/examples/datavisualization/qmllegend/qml/qmllegend/main.qml b/examples/datavisualization/qmllegend/qml/qmllegend/main.qml index a24b1896..91abdd78 100644 --- a/examples/datavisualization/qmllegend/qml/qmllegend/main.qml +++ b/examples/datavisualization/qmllegend/qml/qmllegend/main.qml @@ -37,7 +37,7 @@ Item { Bars3DNG { id: barGraph anchors.fill: parent - selectionMode: AbstractGraph3D.SelectionItemAndRow + selectionMode: AbstractGraph3D.SelectionItem//AndRow scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeftHigh theme: firstTheme valueAxis.labelFormat: "%d\u00B0C"