Все события мыши protected. Я пытался сделать это через eventFilter и используя QObject :: connect, но результат ложный. Как мне поймать событие щелчка на Esri :: ArcGISRuntime :: Graphic ?
Что я пробовал:
...
void ViewshedGeoElement::graphic3dMouseClicked()
{
qDebug()<<"m_graphic3d";
}
bool ViewshedGeoElement::eventFilter(QObject *obj, QEvent *event)
{
qDebug()<<obj<<event;
if (event->type() == QEvent::MouseButtonPress)
{
graphic3dMouseClicked();
return true;
}
return false;
}
...
Esri::ArcGISRuntime::Graphic* m_graphic3d = nullptr;
m_model3d = new ModelSceneSymbol(QUrl(dataPath + PathModel), 1.0f, this);
m_model3d->setAnchorPosition(SceneSymbolAnchorPosition::Bottom);
m_model3d->setHeading(180.0f);
m_graphic3d = new Graphic(dp.m_pos, m_model3d, this);
m_graphic3d->attributes()->insertAttribute(HEADING, dp.m_heading);
m_graphic3d->attributes()->insertAttribute(PITCH, dp.m_pitch);
m_graphic3d->attributes()->insertAttribute(ROLL, dp.m_roll);
m_sceneView->graphicsOverlays()->at(0)->graphics()->installEventFilter(m_graphic3d);
...
Второй способ тоже не позволяет отловить событие:
...
void ViewshedGeoElement::graphic3dMouseClicked()
{
qDebug()<<"m_graphic3d";
}
...
QObject::connect(m_graphic3d,SIGNAL(mousePressEvent()),this,SLOT(graphic3dMouseClicked()));
Мой код выбирает один Graphic и выделяет его:
...
QObjectList m_PointLogLag;
...
void ViewshedGeoElement::connectSignals()
{
// handle the identifyLayerCompleted signal
QObject::connect(m_sceneView, &SceneQuickView::identifyGraphicsOverlayCompleted, this, [this](QUuid, IdentifyGraphicsOverlayResult* result)
{
if (result->graphicsOverlay()->graphics()->isEmpty())
return;
// get the results
GraphicListModel* graphicElements = result->graphicsOverlay()->graphics();
for(int i=0;i<graphicElements->size();i++)
{
Point loaction = graphicElements->at(i)->geometry();
qDebug()<<floor(loaction.x()*10000 )/10000<<floor(m_PointLogLag.last()->property("latitude").toDouble()*10000 )/10000;
qDebug()<<floor(loaction.y()*10000 )/10000<<floor(m_PointLogLag.last()->property("longitude").toDouble()*10000 )/10000;
if (floor(loaction.x()*10000 )/10000==floor(m_PointLogLag.last()->property("latitude").toDouble()*10000 )/10000,
floor(loaction.y()*10000 )/10000==floor(m_PointLogLag.last()->property("longitude").toDouble()*10000 )/10000)
{
graphicElements->at(i)->setSelected(true);
return;
}
}
});
// when the scene is clicked, identify the clicked feature and select it
QObject::connect(m_sceneView, &SceneQuickView::mousePressed, this, [this](QMouseEvent& mouseEvent)
{
// clear any previous selection
m_sceneView->graphicsOverlays()->at(0)->clearSelection();
Point clickedPoint = m_sceneView->screenToBaseSurface(mouseEvent.x(), mouseEvent.y());
m_PointLogLag.append(new Coordinates(clickedPoint.x(),clickedPoint.y()));
// identify from the click
m_sceneView->identifyGraphicsOverlay(m_sceneView->graphicsOverlays()->at(0), mouseEvent.x(), mouseEvent.y(), 10, false);
});
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Почему не компилируется я же всё вроде бы (но это не точно) грамотно написал
Пытаюсь сделать функцию, которая будет возвращать тип из шаблона, что-то вроде такого:
Я всегда думал, что для адресной математики не важно, какого типа указатель - все равно вычисления будет производить в байтахНо, кажется, я упустил...
Вроде после первичного использования setRootIndex на директорию у QAbstractItemView для модели QFileSystemModel в терминал сыпятся ошибки: