Класс Q3DSurface
Класс Q3DSurface предоставляет методы для визуализации 3D поверхностей. Подробнее...
| Заголовок: | #include <Q3DSurface> |
| С тех пор: | QtDataVisualization 1.0 |
| Наследует: | QAbstract3DGraph |
Этот класс был представлен в QtDataVisualization 1.0.
Свойства
|
Открытые функции
| Q3DSurface(const QSurfaceFormat *format = nullptr, QWindow *parent = nullptr) | |
| virtual | ~Q3DSurface() |
| void | addAxis(QValue3DAxis *axis) |
| void | addSeries(QSurface3DSeries *series) |
| QList<QValue3DAxis *> | axes() const |
| QValue3DAxis * | axisX() const |
| QValue3DAxis * | axisY() const |
| QValue3DAxis * | axisZ() const |
| bool | flipHorizontalGrid() const |
| void | releaseAxis(QValue3DAxis *axis) |
| void | removeSeries(QSurface3DSeries *series) |
| QSurface3DSeries * | selectedSeries() const |
| QList<QSurface3DSeries *> | seriesList() const |
| void | setAxisX(QValue3DAxis *axis) |
| void | setAxisY(QValue3DAxis *axis) |
| void | setAxisZ(QValue3DAxis *axis) |
| void | setFlipHorizontalGrid(bool flip) |
Сигналы
| void | axisXChanged(QValue3DAxis *axis) |
| void | axisYChanged(QValue3DAxis *axis) |
| void | axisZChanged(QValue3DAxis *axis) |
| void | flipHorizontalGridChanged(bool flip) |
| void | selectedSeriesChanged(QSurface3DSeries *series) |
Подробное описание
Этот класс позволяет разработчикам визуализировать 3D графики поверхностей и просматривать их, свободно вращая сцену. Визуальные свойства поверхности, такие как режим отрисовки и затенение, можно настраивать с помощью класса QSurface3DSeries.
Класс Q3DSurface поддерживает выделение, отображая выделенную точку на данных, где пользователь щелкнул левой кнопкой мыши (при использовании обработчика ввода по умолчанию) или выделил с помощью QSurface3DSeries. Указатель выделения сопровождается меткой, которая в стандартном случае отображает значение точки данных и координаты точки.
Диапазон значений и формат метки, отображаемые на оси, можно настроить с помощью класса QValue3DAxis.
Для вращения графика удерживайте правую кнопку мыши и перемещайте мышь. Масштабирование выполняется с помощью колесика мыши. Оба варианта предполагают использование обработчика ввода по умолчанию.
Если для Q3DSurface не заданы явно оси, создаются временные оси по умолчанию без меток. Эти оси по умолчанию можно изменить с помощью функций доступа к осям, но как только любая ось задаётся явно для ориентации, ось по умолчанию для этой ориентации уничтожается.
Как создать минимальный график Q3DSurface
Сначала создайте Q3DSurface. Поскольку в этом примере график запускается как окно верхнего уровня, необходимо сбросить флаг Qt::FramelessWindowHint, который устанавливается по умолчанию:
Q3DSurface surface; surface.setFlags(surface.flags() ^ Qt::FramelessWindowHint);
Теперь Q3DSurface готов получать данные для отрисовки. Создайте элементы данных для хранения значений:
QSurfaceDataArray *data = new QSurfaceDataArray; QSurfaceDataRow *dataRow1 = new QSurfaceDataRow; QSurfaceDataRow *dataRow2 = new QSurfaceDataRow;
Сначала заполните данные элементами строк, а затем добавьте их указатели в элемент данных:
*dataRow1 << QVector3D(0.0f, 0.1f, 0.5f) << QVector3D(1.0f, 0.5f, 0.5f); *dataRow2 << QVector3D(0.0f, 1.8f, 1.0f) << QVector3D(1.0f, 1.2f, 1.0f); *data << dataRow1 << dataRow2;
Создайте новую серию и задайте для неё данные:
QSurface3DSeries *series = new QSurface3DSeries; series->dataProxy()->resetArray(data); surface.addSeries(series);
Наконец, вам нужно сделать его видимым:
surface.show();
Полный код, необходимый для создания и отображения этого графика:
#include <QtDataVisualization>
using namespace QtDataVisualization;
int main(int argc, char **argv)
{
QGuiApplication app(argc, argv);
Q3DSurface surface;
surface.setFlags(surface.flags() ^ Qt::FramelessWindowHint);
QSurfaceDataArray *data = new QSurfaceDataArray;
QSurfaceDataRow *dataRow1 = new QSurfaceDataRow;
QSurfaceDataRow *dataRow2 = new QSurfaceDataRow;
*dataRow1 << QVector3D(0.0f, 0.1f, 0.5f) << QVector3D(1.0f, 0.5f, 0.5f);
*dataRow2 << QVector3D(0.0f, 1.8f, 1.0f) << QVector3D(1.0f, 1.2f, 1.0f);
*data << dataRow1 << dataRow2;
QSurface3DSeries *series = new QSurface3DSeries;
series->dataProxy()->resetArray(data);
surface.addSeries(series);
surface.show();
return app.exec();
} И вот что эти несколько строк кода производят:
Сцену можно вращать, приближать/удалять, и можно выделить точку поверхности, чтобы посмотреть её позицию, но никаких других взаимодействий в этом минимальном примере кода нет. Вы можете узнать больше, ознакомившись с примерами, такими как Пример поверхности.
См. также Q3DBars, Q3DScatter и Классы Qt Data Visualization C++.
END_OF_DOCUMENT_MARKERДокументация свойств
axisX : QValue3DAxis*
Это свойство содержит активную ось X.
Функции доступа:
| QValue3DAxis * | axisX() const |
| void | setAxisX(QValue3DAxis *axis) |
Сигнал уведомления:
| void | axisXChanged(QValue3DAxis *axis) |
axisY : QValue3DAxis*
Это свойство содержит активную ось Y.
Функции доступа:
| QValue3DAxis * | axisY() const |
| void | setAxisY(QValue3DAxis *axis) |
Сигнал уведомления:
| void | axisYChanged(QValue3DAxis *axis) |
axisZ : QValue3DAxis*
Это свойство содержит активную ось Z.
Функции доступа:
| QValue3DAxis * | axisZ() const |
| void | setAxisZ(QValue3DAxis *axis) |
Сигнал уведомления:
| void | axisZChanged(QValue3DAxis *axis) |
flipHorizontalGrid : bool
Это свойство определяет, отображается ли сетка по горизонтали сверху графика, а не снизу.
В некоторых случаях сетка по горизонтали может быть в основном скрыта поверхностью, поэтому может быть полезнее отображать ее сверху графика, а не снизу. Типичный пример — отображение 2D спектrogram с использованием ортогональной проекции с верхним видом.
Если false, сетка и метки по горизонтали отображаются на горизонтальном фоне графика. Если true, сетка и метки по горизонтали отображаются на противоположной стороне графика от горизонтального фона. По умолчанию false.
Это свойство было введено в QtDataVisualization 1.2.
Функции доступа:
| bool | flipHorizontalGrid() const |
| void | setFlipHorizontalGrid(bool flip) |
Сигнал уведомления:
| void | flipHorizontalGridChanged(bool flip) |
selectedSeries : QSurface3DSeries* const
Это свойство содержит выбранный ряд или null.
Если selectionMode имеет SelectionMultiSeries значение, это свойство содержит ряд, которому принадлежит выбранная точка.
Функции доступа:
| QSurface3DSeries * | selectedSeries() const |
Сигнал уведомления:
| void | selectedSeriesChanged(QSurface3DSeries *series) |
Документация функций-членов
Q3DSurface::Q3DSurface(const QSurfaceFormat *format = nullptr, QWindow *parent = nullptr)
Создает новый график 3D поверхности с необязательным окном parent и форматом поверхности format.
[virtual] Q3DSurface::~Q3DSurface()
Удаляет график 3D поверхности.
void Q3DSurface::addAxis(QValue3DAxis *axis)
Добавляет axis к графику. Оси, добавленные с помощью addAxis, пока не используются, addAxis просто используется для передачи владения axis графику. axis не должен быть нулевым или добавленным к другому графику.
См. также releaseAxis(), setAxisX(), setAxisY() и setAxisZ().
void Q3DSurface::addSeries(QSurface3DSeries *series)
Добавляет series к графику. График может содержать несколько рядов, но имеет только один набор осей. Если добавленный ряд имеет указанный выбранный элемент, он будет выделен, а любой существующий выбор будет очищен. Только один добавленный ряд может иметь активный выбор.
QList<QValue3DAxis *> Q3DSurface::axes() const
Возвращает список всех добавленных осей.
См. также addAxis().
void Q3DSurface::releaseAxis(QValue3DAxis *axis)
Возвращает владение axis обратно вызывающей стороне, если он добавлен к этому графику. Если освобожденная axis используется, будет создана и активирована новая ось по умолчанию.
Если ось по умолчанию освобождена и добавлена позже, она ведет себя как любая другая ось.
См. также addAxis(), setAxisX(), setAxisY() и setAxisZ().
void Q3DSurface::removeSeries(QSurface3DSeries *series)
Удаляет series из графика.
QList<QSurface3DSeries *> Q3DSurface::seriesList() const
Возвращает список рядов, добавленных к этому графику.
void Q3DSurface::setAxisX(QValue3DAxis *axis)
Устанавливает axis как активную ось X. Неявно вызывает addAxis() для передачи владения осью этому графику.
Если axis равно null, создается временная ось по умолчанию без меток и с автоматически настраиваемым диапазоном.
Эта временная ось уничтожается, если другая ось явно устанавливается для той же ориентации.
Примечание: Функция-установщик для свойства axisX.
См. также axisX(), addAxis() и releaseAxis().
void Q3DSurface::setAxisY(QValue3DAxis *axis)
Устанавливает axis как активную ось Y. Неявно вызывает addAxis() для передачи владения осью этому графику.
Если axis равно null, создается временная ось по умолчанию без меток и с автоматически настраиваемым диапазоном.
Эта временная ось уничтожается, если другая ось явно устанавливается для той же ориентации.
Примечание: Функция-установщик для свойства axisY.
См. также axisY(), addAxis() и releaseAxis().
void Q3DSurface::setAxisZ(QValue3DAxis *axis)
Устанавливает axis как активную ось Z. Неявно вызывает addAxis() для передачи владения осью этому графику.
Если axis равно null, создается временная ось по умолчанию без меток и с автоматически настраиваемым диапазоном.
Эта временная ось уничтожается, если другая ось явно устанавливается для той же ориентации.
Примечание: Функция-установщик для свойства axisZ.
См. также axisZ(), addAxis() и releaseAxis().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/q3dsurface.html