- Qt 6.8
- Qt Graphs
- Qt Graphs Migration from Qt DataVisualization
- Qt Graphs | Commercial or GPLv3

# Qt Graphs Migration from Qt DataVisualization

The API and functionality between Qt DataVisualization and Qt Graphs have been kept mostly unchanged. However, there are some differences that need to be taken into consideration when migrating your application from Qt DataVisualization to Qt Graphs:

- QML import statement
- CMake module inclusion
- qmake module inclusion
- Widget application creation
- Requirement to use OpenGL backend
- Removed classes
- Removed APIs
- Changed APIs

## QML Import Statement

The import statement in Qt DataVisualization:

     import QtDataVisualization

has to be changed to:

     import QtGraphs

for Qt Graphs.

## CMake Module Inclusion

The inclusion in Qt DataVisualization:

     find_package(Qt6 REQUIRED COMPONENTS DataVisualization)
     target_link_libraries(mytarget PRIVATE Qt6::DataVisualization)

has to be changed to:

     find_package(Qt6 REQUIRED COMPONENTS Graphs)
     target_link_libraries(mytarget PRIVATE Qt6::Graphs)

for Qt Graphs.

## Qmake Module Inclusion

The inclusion in Qt DataVisualization:

     QT += datavisualization

has to be changed to:

     QT += graphs

for Qt Graphs.

## Widget Application Creation

Instead of creating your widget application like this:

     QGuiApplication app(argc, argv);
     Q3DScatter scatter;
     scatter.setFlags(scatter.flags() ^ Qt::FramelessWindowHint);

you should create it like this:

     QApplication app(argc, argv);
     Q3DScatter scatter;
     scatter.setMinimumSize(QSize(256, 256));

## Requirement to Use OpenGL Backend

Adding the forced OpenGL backend usage:

     qputenv("QSG_RHI_BACKEND", "opengl");

is no longer required. Qt Graphs uses Qt Quick 3D for rendering, and as such supports the rendering backends native to the platform it is being run on.

## Removed classes

- Q3DCamera
- Q3DLight
- Q3DObject

## Removed APIs

- hasContext
- shadowsSupported
- reflection
- reflectivity

## Changed APIs

- optimizationHint
- renderingMode
- renderToImage
- ColorGradient and ColorGradientStop
- ThemeColor
- Data APIs
- Camera APIs
- Enums

### optimizationHint

`Legacy` is now the mode that was `OptimizationDefault` in QtDataVisualization. `Default` uses instancing, and should be used for all targets that support it.

### renderingMode

`RenderDirectToBackground_NoClear` has been removed, as it was already obsolete in QtDataVisualization in Qt 6.

### renderToImage

`renderToImage` now returns `QSharedPointer<QQuickItemGrabResult>` instead of a `QImage`, and does not take `msaaSamples` as a parameter anymore.

### ColorGradient and ColorGradientStop

`ColorGradient` is now `Gradient` and `ColorGradientStop` `GradientStop`.

### ThemeColor

`ThemeColor` is now `Color`.

### Data APIs

No need to create data arrays with `new` anymore. For example, when data was created for bar graph in QtDataVisualization, it was done like this:

     QBarDataRow *data = new QBarDataRow;
     *data << 1.0f << 3.0f << 7.5f << 5.0f << 2.2f;

Now, it is done like this:

     QBarDataRow data;
     data << 1.0f << 3.0f << 7.5f << 5.0f << 2.2f;
     series->dataProxy()->addRow(data);

### Camera APIs

As Q3DCamera has been removed, the required functions from it have been moved. `cameraPreset, cameraTargetPosition, cameraXRotation, cameraYRotation, cameraZoomLevel, wrapCameraXRotation, and wrapCameraYRotation` can now be found from AbstractGraph3D.

### Enums

All enums have been turned into scoped enums, for example `QAbstract3DGraph::ShadowQualityLow` has been converted to `QAbstract3DGraph::ShadowQuality::Low`.