Класс Q3DSurface
Класс Q3DSurface предоставляет методы для отрисовки 3D-графиков поверхностей. Подробнее...
| Заголовок: | #include <Q3DSurface> |
| С тех пор: | QtDataVisualization 1.0 |
| Наследует: | QAbstract3DGraph |
Свойства
|
Открытые функции
| 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>
int main(int argc, char **argv)
{
qputenv("QSG_RHI_BACKEND", "opengl");
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++.
Документация по свойствам
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) |
[since QtDataVisualization 1.2] flipHorizontalGrid : bool
Это свойство указывает, отображается ли сетка по горизонтали поверх графика, а не внизу.
В некоторых случаях сетка по горизонтали может быть в основном закрыта поверхностью, поэтому может быть полезнее отображать её поверх графика, а не внизу. Типичным примером этого является отображение 2D спектrogram с использованием ортогональной проекции с видом сверху.
Если false, сетка и метки по горизонтали выводятся на горизонтальном фоне графика. Если true, сетка и метки по горизонтали выводятся на противоположной стороне графика от горизонтального фона. По умолчанию false.
Это свойство было добавлено в QtDataVisualization 1.2.
Функции доступа:
| bool | flipHorizontalGrid() const |
| void | setFlipHorizontalGrid(bool flip) |
Сигнал уведомления:
| void | flipHorizontalGridChanged(bool flip) |
[read-only] selectedSeries : QSurface3DSeries* const
Это свойство содержит выделенный ряд или null.
Если режим выбора 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 не должен быть null или добавлен к другому графику.
См. также 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-6.1/q3dsurface.html