LKuper
LKuper

Reputation: 21

Q3DScatter does not appear inside QWidget

I am using QtDataVisualization to set up a 3d plot of single Points. Using the corresponding Q3DScatter the way it is documented in Qt examples works so far:

QGuiApplication app(argc, argv);

Q3DScatter scatter;
scatter.setFlags(scatter.flags() ^ Qt::FramelessWindowHint);

QScatter3DSeries *series = new QScatter3DSeries;
QScatterDataArray data;
data << QVector3D(0.5f, 0.5f, 0.5f) << QVector3D(-0.3f, -0.5f, -0.4f) << QVector3D(0.0f, -0.3f, 0.2f);
series->dataProxy()->addItems(data);
scatter.addSeries(series);

scatter.show();
return app.exec();

When i modify this by wrapping a QWidget around this graph, the graph isn't shown. The widget appears as empty (grey).

QGuiApplication app(argc, argv);

Q3DScatter scatter;
scatter.setFlags(scatter.flags() ^ Qt::FramelessWindowHint);

QWidget *container = QWidget::createWindowContainer(scatter);
QSize screenSize = scatter->screen()->size();
container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 1.5));
container->setMaximumSize(screenSize);
container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
container->setFocusPolicy(Qt::StrongFocus);

QScatter3DSeries *series = new QScatter3DSeries;
QScatterDataArray data;
data << QVector3D(0.5f, 0.5f, 0.5f) << QVector3D(-0.3f, -0.5f, -0.4f) << QVector3D(0.0f, -0.3f, 0.2f);
series->dataProxy()->addItems(data);
scatter.addSeries(series);

container->show();
return app.exec();

Is there something wrong with my code?

Upvotes: 1

Views: 433

Answers (1)

KcFnMi
KcFnMi

Reputation: 6171

From QGuiApplication, "For QWidget based Qt applications, use QApplication instead, as it provides some functionality needed for creating QWidget instances". Then following could be done:

    //    QGuiApplication app(argc, argv);
    QApplication app(argc, argv);
    QMainWindow w;

    Q3DScatter scatter;
    scatter.setFlags(scatter.flags() ^ Qt::FramelessWindowHint);

    QWidget *container = QWidget::createWindowContainer(&scatter);    
    w.setCentralWidget(container);

    QSize screenSize = scatter.screen()->size();
    container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 1.5));
    container->setMaximumSize(screenSize);
    container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    container->setFocusPolicy(Qt::StrongFocus);

    QScatter3DSeries *series = new QScatter3DSeries;
    QScatterDataArray data;
    data << QVector3D(0.5f, 0.5f, 0.5f) << QVector3D(-0.3f, -0.5f, -0.4f) << QVector3D(0.0f, -0.3f, 0.2f);
    series->dataProxy()->addItems(data);
    scatter.addSeries(series);

//    container->show();
    w.show();

    return app.exec();

Upvotes: 0

Related Questions