Класс 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-спектрограмм с ортогональной проекцией и сверху вниз.
Если false, сетка и метки оси X отображаются на горизонтальном фоне графика. Если true, сетка и метки оси X отображаются на противоположной стороне графика по отношению к горизонтальному фону. По умолчанию false.
Это свойство было добавлено в QtDataVisualization 1.2.
Функции доступа:
| bool | flipHorizontalGrid() const |
| void | setFlipHorizontalGrid(bool flip) |
Сигнал уведомления:
| void | flipHorizontalGridChanged(bool flip) |
[read-only] 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-6.2/q3dsurface.html