Spec-Zone.ru › Qt

Класс Q3DSurface

Класс Q3DSurface предоставляет методы для отрисовки 3D-графиков поверхностей. Подробнее...

Заголовок: #include <Q3DSurface>
С тех пор: QtDataVisualization 1.0
Наследует: QAbstract3DGraph
  • Список всех членов, включая унаследованные

Свойства

  • axisX : QValue3DAxis*
  • axisY : QValue3DAxis*
  • axisZ : QValue3DAxis*
  • flipHorizontalGrid : bool
  • selectedSeries : QSurface3DSeries* const

Открытые функции

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API