Всем привет!Подскажите, пожалуйста, можно ли получить данные координатной сетки из QHeightMapSurfaceDataProxy? Поверхность отрисовывается нормально. Я делал попытки получить данные через:
const QSurfaceDataArray *array = layerNewProxy->array();
и другие, подходящие по смыслу методы, но все что, пробовал возвращает 0 или ASSERT(...).
Q3DSurface *surface = new Q3DSurface();
QImage layerOneHMap(":/maps/layer_1.png");
QHeightMapSurfaceDataProxy *layerOneProxy = new QHeightMapSurfaceDataProxy(layerOneHMap);
QSurface3DSeries *layerOneSeries = new QSurface3DSeries(layerOneProxy);
layerOneSeries->setItemLabelFormat(QStringLiteral("(@xLabel, @zLabel): @yLabel"));
layerOneProxy->setValueRanges(34.0f, 40.0f, 18.0f, 24.0f);
layerOneSeries->setDrawMode(QSurface3DSeries::DrawSurface);
layerOneSeries->setFlatShadingEnabled(false);
surface->addSeries(layerOneSeries);Массив строк, который заполняю сам - всегда возвращается, но вот тот, что создается через
QHeightMapSurfaceDataProxy никогда :( В Qt только начинаю. Ссылка на пример:https://doc.qt.io/qt-5.10/qtdatavisualization-surface-exampl...
Буду благодарен, за любую помощь!
>[оверквотинг удален]
> layerOneSeries->setItemLabelFormat(QStringLiteral("(@xLabel, @zLabel): @yLabel"));
> layerOneProxy->setValueRanges(34.0f, 40.0f, 18.0f, 24.0f);
> layerOneSeries->setDrawMode(QSurface3DSeries::DrawSurface);
> layerOneSeries->setFlatShadingEnabled(false);
> surface->addSeries(layerOneSeries);
> Массив строк, который заполняю сам - всегда возвращается, но вот тот, что
> создается через
> QHeightMapSurfaceDataProxy никогда :( В Qt только начинаю. Ссылка на пример:
> https://doc.qt.io/qt-5.10/qtdatavisualization-surface-exampl...
> Буду благодарен, за любую помощь!Кажется понял в чем проблема.
Я пытался получить значения сразу после создания объекта QHeightMapSurfaceDataProxy *layerOneProxy, а он заполняется позже, после того как сработает таймер вот здесь:
348 QHeightMapSurfaceDataProxyPrivate::QHeightMapSurfaceDataProxyPrivate(QHeightMapSurfaceDataProxy *q)
349 : QSurfaceDataProxyPrivate(q),
350 m_minXValue(defaultMinValue),
351 m_maxXValue(defaultMaxValue),
352 m_minZValue(defaultMinValue),
353 m_maxZValue(defaultMaxValue)
354 {
355 m_resolveTimer.setSingleShot(true);
356 QObject::connect(&m_resolveTimer, &QTimer::timeout,
357 this, &QHeightMapSurfaceDataProxyPrivate::handlePendingResolve);
358 }
Поэтому, я создал обработчик на сигнал arrayReset() и уже в нем данные в массиве готовы к использованию
connect(layerNewProxy, SIGNAL(arrayReset()), this, SLOT(arrayMapDataReset()));void Foo::arrayMapDataReset()
{
const QSurfaceDataArray *array = layerNewProxy->array();
if(array) {
statusBar()->showMessage(QString::number(layerNewProxy->columnCount())+" x "+
QString::number(layerNewProxy->rowCount()));
}
}