Класс Q3DSurface
Класс Q3DSurface предоставляет методы для отрисовки 3D-поверхностей графиков. Подробнее...
| Заголовок: | #include <Q3DSurface> |
| С тех пор: | QtDataVisualization 1.0 |
| Наследует: | QAbstract3DGraph |
Свойства
|
- 19 свойств, унаследованных от QAbstract3DGraph
- 16 свойств, унаследованных от QWindow
- 1 свойство, унаследованное от QObject
Публичные функции
| Q3DSurface(const QSurfaceFormat *format = Q_NULLPTR, QWindow *parent = Q_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) |
- 54 публичных функций, унаследованных от QAbstract3DGraph
- 80 публичных функций, унаследованных от QWindow
- 145 публичных функций, унаследованных от QOpenGLFunctions
- 32 публичных функции, унаследованных от QObject
- 6 публичных функций, унаследованных от QSurface
Сигналы
| void | axisXChanged(QValue3DAxis *axis) |
| void | axisYChanged(QValue3DAxis *axis) |
| void | axisZChanged(QValue3DAxis *axis) |
| void | flipHorizontalGridChanged(bool flip) |
| void | selectedSeriesChanged(QSurface3DSeries *series) |
- 18 сигналов, унаследованных от QAbstract3DGraph
- 18 сигналов, унаследованных от QWindow
- 2 сигнала, унаследованных от QObject
Дополнительные наследуемые члены
- 22 публичных слотов, унаследованных от QWindow
- 1 публичный слот, унаследованный от QObject
- 1 статический публичный член, унаследованный от QWindow
- 11 статических публичных членов, унаследованных от QObject
- 18 защищенных функций, унаследованных от QWindow
- 9 защищенных функций, унаследованных от QObject
Подробное описание
Класс Q3DSurface предоставляет методы для отрисовки 3D-поверхностей графиков.
Этот класс позволяет разработчикам отрисовывать 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 спектров с помощью ортогональной проекции и сверху вниз.
Если 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 = Q_NULLPTR, QWindow *parent = Q_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-5.9/q3dsurface.html