Класс 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();
} И вот что производят эти несколько строк кода:
Сцену можно вращать, приближать и выделять точку поверхности, чтобы увидеть ее положение, но в этом минимальном примере кода не включена никакая другая интерактивность. Вы можете узнать больше, ознакомившись с примерами, такими как Surface Example.
См. также Q3DBars, Q3DScatter и Qt Data Visualization C++ Classes.
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 спектрограмм с использованием ортогональной проекции и вида сверху.
Если 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.15/q3dsurface.html