main.cpp Example File

scatter/main.cpp

  /****************************************************************************
  **
  ** Copyright (C) 2016 The Qt Company Ltd.
  ** Contact: https://www.qt.io/licensing/
  **
  ** This file is part of the Qt Data Visualization module of the Qt Toolkit.
  **
  ** $QT_BEGIN_LICENSE:GPL$
  ** Commercial License Usage
  ** Licensees holding valid commercial Qt licenses may use this file in
  ** accordance with the commercial license agreement provided with the
  ** Software or, alternatively, in accordance with the terms contained in
  ** a written agreement between you and The Qt Company. For licensing terms
  ** and conditions see https://www.qt.io/terms-conditions. For further
  ** information use the contact form at https://www.qt.io/contact-us.
  **
  ** GNU General Public License Usage
  ** Alternatively, this file may be used under the terms of the GNU
  ** General Public License version 3 or (at your option) any later version
  ** approved by the KDE Free Qt Foundation. The licenses are as published by
  ** the Free Software Foundation and appearing in the file LICENSE.GPL3
  ** included in the packaging of this file. Please review the following
  ** information to ensure the GNU General Public License requirements will
  ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
  **
  ** $QT_END_LICENSE$
  **
  ****************************************************************************/

  #include "scatterdatamodifier.h"

  #include <QtWidgets/QApplication>
  #include <QtWidgets/QWidget>
  #include <QtWidgets/QHBoxLayout>
  #include <QtWidgets/QVBoxLayout>
  #include <QtWidgets/QPushButton>
  #include <QtWidgets/QCheckBox>
  #include <QtWidgets/QComboBox>
  #include <QtWidgets/QFontComboBox>
  #include <QtWidgets/QLabel>
  #include <QtWidgets/QMessageBox>
  #include <QtGui/QScreen>
  #include <QtGui/QFontDatabase>

  int main(int argc, char **argv)
  {
      QApplication app(argc, argv);
      Q3DScatter *graph = new Q3DScatter();
      QWidget *container = QWidget::createWindowContainer(graph);

      if (!graph->hasContext()) {
          QMessageBox msgBox;
          msgBox.setText("Couldn't initialize the OpenGL context.");
          msgBox.exec();
          return -1;
      }

      QSize screenSize = graph->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);

      QWidget *widget = new QWidget;
      QHBoxLayout *hLayout = new QHBoxLayout(widget);
      QVBoxLayout *vLayout = new QVBoxLayout();
      hLayout->addWidget(container, 1);
      hLayout->addLayout(vLayout);

      widget->setWindowTitle(QStringLiteral("A Cosine Wave"));

      QComboBox *themeList = new QComboBox(widget);
      themeList->addItem(QStringLiteral("Qt"));
      themeList->addItem(QStringLiteral("Primary Colors"));
      themeList->addItem(QStringLiteral("Digia"));
      themeList->addItem(QStringLiteral("Stone Moss"));
      themeList->addItem(QStringLiteral("Army Blue"));
      themeList->addItem(QStringLiteral("Retro"));
      themeList->addItem(QStringLiteral("Ebony"));
      themeList->addItem(QStringLiteral("Isabelle"));
      themeList->setCurrentIndex(6);

      QPushButton *labelButton = new QPushButton(widget);
      labelButton->setText(QStringLiteral("Change label style"));

      QCheckBox *smoothCheckBox = new QCheckBox(widget);
      smoothCheckBox->setText(QStringLiteral("Smooth dots"));
      smoothCheckBox->setChecked(true);

      QComboBox *itemStyleList = new QComboBox(widget);
      itemStyleList->addItem(QStringLiteral("Sphere"), int(QAbstract3DSeries::MeshSphere));
      itemStyleList->addItem(QStringLiteral("Cube"), int(QAbstract3DSeries::MeshCube));
      itemStyleList->addItem(QStringLiteral("Minimal"), int(QAbstract3DSeries::MeshMinimal));
      itemStyleList->addItem(QStringLiteral("Point"), int(QAbstract3DSeries::MeshPoint));
      itemStyleList->setCurrentIndex(0);

      QPushButton *cameraButton = new QPushButton(widget);
      cameraButton->setText(QStringLiteral("Change camera preset"));

      QPushButton *itemCountButton = new QPushButton(widget);
      itemCountButton->setText(QStringLiteral("Toggle item count"));

      QCheckBox *backgroundCheckBox = new QCheckBox(widget);
      backgroundCheckBox->setText(QStringLiteral("Show background"));
      backgroundCheckBox->setChecked(true);

      QCheckBox *gridCheckBox = new QCheckBox(widget);
      gridCheckBox->setText(QStringLiteral("Show grid"));
      gridCheckBox->setChecked(true);

      QComboBox *shadowQuality = new QComboBox(widget);
      shadowQuality->addItem(QStringLiteral("None"));
      shadowQuality->addItem(QStringLiteral("Low"));
      shadowQuality->addItem(QStringLiteral("Medium"));
      shadowQuality->addItem(QStringLiteral("High"));
      shadowQuality->addItem(QStringLiteral("Low Soft"));
      shadowQuality->addItem(QStringLiteral("Medium Soft"));
      shadowQuality->addItem(QStringLiteral("High Soft"));
      shadowQuality->setCurrentIndex(4);

      QFontComboBox *fontList = new QFontComboBox(widget);
      fontList->setCurrentFont(QFont("Arial"));

      vLayout->addWidget(labelButton, 0, Qt::AlignTop);
      vLayout->addWidget(cameraButton, 0, Qt::AlignTop);
      vLayout->addWidget(itemCountButton, 0, Qt::AlignTop);
      vLayout->addWidget(backgroundCheckBox);
      vLayout->addWidget(gridCheckBox);
      vLayout->addWidget(smoothCheckBox, 0, Qt::AlignTop);
      vLayout->addWidget(new QLabel(QStringLiteral("Change dot style")));
      vLayout->addWidget(itemStyleList);
      vLayout->addWidget(new QLabel(QStringLiteral("Change theme")));
      vLayout->addWidget(themeList);
      vLayout->addWidget(new QLabel(QStringLiteral("Adjust shadow quality")));
      vLayout->addWidget(shadowQuality);
      vLayout->addWidget(new QLabel(QStringLiteral("Change font")));
      vLayout->addWidget(fontList, 1, Qt::AlignTop);

      ScatterDataModifier *modifier = new ScatterDataModifier(graph);

      QObject::connect(cameraButton, &QPushButton::clicked, modifier,
                       &ScatterDataModifier::changePresetCamera);
      QObject::connect(labelButton, &QPushButton::clicked, modifier,
                       &ScatterDataModifier::changeLabelStyle);
      QObject::connect(itemCountButton, &QPushButton::clicked, modifier,
                       &ScatterDataModifier::toggleItemCount);

      QObject::connect(backgroundCheckBox, &QCheckBox::stateChanged, modifier,
                       &ScatterDataModifier::setBackgroundEnabled);
      QObject::connect(gridCheckBox, &QCheckBox::stateChanged, modifier,
                       &ScatterDataModifier::setGridEnabled);
      QObject::connect(smoothCheckBox, &QCheckBox::stateChanged, modifier,
                       &ScatterDataModifier::setSmoothDots);

      QObject::connect(modifier, &ScatterDataModifier::backgroundEnabledChanged,
                       backgroundCheckBox, &QCheckBox::setChecked);
      QObject::connect(modifier, &ScatterDataModifier::gridEnabledChanged,
                       gridCheckBox, &QCheckBox::setChecked);
      QObject::connect(itemStyleList, SIGNAL(currentIndexChanged(int)), modifier,
                       SLOT(changeStyle(int)));

      QObject::connect(themeList, SIGNAL(currentIndexChanged(int)), modifier,
                       SLOT(changeTheme(int)));

      QObject::connect(shadowQuality, SIGNAL(currentIndexChanged(int)), modifier,
                       SLOT(changeShadowQuality(int)));

      QObject::connect(modifier, &ScatterDataModifier::shadowQualityChanged, shadowQuality,
                       &QComboBox::setCurrentIndex);
      QObject::connect(graph, &Q3DScatter::shadowQualityChanged, modifier,
                       &ScatterDataModifier::shadowQualityUpdatedByVisual);

      QObject::connect(fontList, &QFontComboBox::currentFontChanged, modifier,
                       &ScatterDataModifier::changeFont);

      QObject::connect(modifier, &ScatterDataModifier::fontChanged, fontList,
                       &QFontComboBox::setCurrentFont);

      widget->show();
      return app.exec();
  }