main.cpp 范例文件
					 
					
						bars/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 "graphmodifier.h" 
#include <QtWidgets/QApplication> 
#include <QtWidgets/QWidget> 
#include <QtWidgets/QHBoxLayout> 
#include <QtWidgets/QVBoxLayout> 
#include <QtWidgets/QPushButton> 
#include <QtWidgets/QCheckBox> 
#include <QtWidgets/QSlider> 
#include <QtWidgets/QFontComboBox> 
#include <QtWidgets/QLabel> 
#include <QtWidgets/QMessageBox> 
#include <QtGui/QScreen> 
#include <QtGui/QFontDatabase> 
int  main(int  argc,  char  * * argv)
{
    QApplication ,  argv);
    Q3DBars * widgetgraph =  new  Q3DBars QWidget * container =  QWidget :: createWindowContainer(widgetgraph);
    if  (! widgetgraph- > hasContext()) {
        QMessageBox . setText("Couldn't initialize the OpenGL context." );
        msgBox. exec();
        return  - 1 ;
    }
    QSize =  widgetgraph- > screen()- > size();
    container- > setMinimumSize(QSize . 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 QVBoxLayout * vLayout =  new  QVBoxLayout - > addWidget(container,  1 );
    hLayout- > addLayout(vLayout);
    widget- > setWindowTitle(QStringLiteral "Average temperatures in Oulu and Helsinki, Finland (2006-2013)" ));
    QComboBox * themeList =  new  QComboBox - > 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(0 );
    QPushButton * labelButton =  new  QPushButton - > setText(QStringLiteral "Change label style" ));
    QCheckBox * smoothCheckBox =  new  QCheckBox - > setText(QStringLiteral "Smooth bars" ));
    smoothCheckBox- > setChecked(false );
    QComboBox * barStyleList =  new  QComboBox - > addItem(QStringLiteral "Bar" ),  int (QAbstract3DSeries:: MeshBar));
    barStyleList- > addItem(QStringLiteral "Pyramid" ),  int (QAbstract3DSeries:: MeshPyramid));
    barStyleList- > addItem(QStringLiteral "Cone" ),  int (QAbstract3DSeries:: MeshCone));
    barStyleList- > addItem(QStringLiteral "Cylinder" ),  int (QAbstract3DSeries:: MeshCylinder));
    barStyleList- > addItem(QStringLiteral "Bevel bar" ),  int (QAbstract3DSeries:: MeshBevelBar));
    barStyleList- > addItem(QStringLiteral "Sphere" ),  int (QAbstract3DSeries:: MeshSphere));
    barStyleList- > setCurrentIndex(4 );
    QPushButton * cameraButton =  new  QPushButton - > setText(QStringLiteral "Change camera preset" ));
    QPushButton * zoomToSelectedButton =  new  QPushButton - > setText(QStringLiteral "Zoom to selected bar" ));
    QComboBox * selectionModeList =  new  QComboBox - > addItem(QStringLiteral "None" ), 
                               int (QAbstract3DGraph:: SelectionNone));
    selectionModeList- > addItem(QStringLiteral "Bar" ), 
                               int (QAbstract3DGraph:: SelectionItem));
    selectionModeList- > addItem(QStringLiteral "Row" ), 
                               int (QAbstract3DGraph:: SelectionRow));
    selectionModeList- > addItem(QStringLiteral "Bar and Row" ), 
                               int (QAbstract3DGraph:: SelectionItemAndRow));
    selectionModeList- > addItem(QStringLiteral "Column" ), 
                               int (QAbstract3DGraph:: SelectionColumn));
    selectionModeList- > addItem(QStringLiteral "Bar and Column" ), 
                               int (QAbstract3DGraph:: SelectionItemAndColumn));
    selectionModeList- > addItem(QStringLiteral "Row and Column" ), 
                               int (QAbstract3DGraph:: SelectionRowAndColumn));
    selectionModeList- > addItem(QStringLiteral "Bar, Row and Column" ), 
                               int (QAbstract3DGraph:: SelectionItemRowAndColumn));
    selectionModeList- > addItem(QStringLiteral "Slice into Row" ), 
                               int (QAbstract3DGraph:: SelectionSlice |  QAbstract3DGraph:: SelectionRow));
    selectionModeList- > addItem(QStringLiteral "Slice into Row and Item" ), 
                               int (QAbstract3DGraph:: SelectionSlice |  QAbstract3DGraph:: SelectionItemAndRow));
    selectionModeList- > addItem(QStringLiteral "Slice into Column" ), 
                               int (QAbstract3DGraph:: SelectionSlice |  QAbstract3DGraph:: SelectionColumn));
    selectionModeList- > addItem(QStringLiteral "Slice into Column and Item" ), 
                               int (QAbstract3DGraph:: SelectionSlice |  QAbstract3DGraph:: SelectionItemAndColumn));
    selectionModeList- > addItem(QStringLiteral "Multi: Bar, Row, Col" ), 
                               int (QAbstract3DGraph:: SelectionItemRowAndColumn
                                   |  QAbstract3DGraph:: SelectionMultiSeries));
    selectionModeList- > addItem(QStringLiteral "Multi, Slice: Row, Item" ), 
                               int (QAbstract3DGraph:: SelectionSlice |  QAbstract3DGraph:: SelectionItemAndRow
                                   |  QAbstract3DGraph:: SelectionMultiSeries));
    selectionModeList- > addItem(QStringLiteral "Multi, Slice: Col, Item" ), 
                               int (QAbstract3DGraph:: SelectionSlice |  QAbstract3DGraph:: SelectionItemAndColumn
                                   |  QAbstract3DGraph:: SelectionMultiSeries));
    selectionModeList- > setCurrentIndex(1 );
    QCheckBox * backgroundCheckBox =  new  QCheckBox - > setText(QStringLiteral "Show background" ));
    backgroundCheckBox- > setChecked(false );
    QCheckBox * gridCheckBox =  new  QCheckBox - > setText(QStringLiteral "Show grid" ));
    gridCheckBox- > setChecked(true );
    QCheckBox * seriesCheckBox =  new  QCheckBox - > setText(QStringLiteral "Show second series" ));
    seriesCheckBox- > setChecked(false );
    QCheckBox * reverseValueAxisCheckBox =  new  QCheckBox - > setText(QStringLiteral "Reverse value axis" ));
    reverseValueAxisCheckBox- > setChecked(false );
    QCheckBox * reflectionCheckBox =  new  QCheckBox - > setText(QStringLiteral "Show reflections" ));
    reflectionCheckBox- > setChecked(false );
    QSlider * rotationSliderX =  new  QSlider Qt :: Horizontal,  widget);
    rotationSliderX- > setTickInterval(30 );
    rotationSliderX- > setTickPosition(QSlider :: TicksBelow);
    rotationSliderX- > setMinimum(- 180 );
    rotationSliderX- > setValue(0 );
    rotationSliderX- > setMaximum(180 );
    QSlider * rotationSliderY =  new  QSlider Qt :: Horizontal,  widget);
    rotationSliderY- > setTickInterval(15 );
    rotationSliderY- > setTickPosition(QSlider :: TicksAbove);
    rotationSliderY- > setMinimum(- 90 );
    rotationSliderY- > setValue(0 );
    rotationSliderY- > setMaximum(90 );
    QSlider * fontSizeSlider =  new  QSlider Qt :: Horizontal,  widget);
    fontSizeSlider- > setTickInterval(10 );
    fontSizeSlider- > setTickPosition(QSlider :: TicksBelow);
    fontSizeSlider- > setMinimum(1 );
    fontSizeSlider- > setValue(30 );
    fontSizeSlider- > setMaximum(100 );
    QFontComboBox * fontList =  new  QFontComboBox - > setCurrentFont(QFont "Times New Roman" ));
    QComboBox * shadowQuality =  new  QComboBox - > 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(5 );
    QComboBox * rangeList =  new  QComboBox - > addItem(QStringLiteral "2006" ));
    rangeList- > addItem(QStringLiteral "2007" ));
    rangeList- > addItem(QStringLiteral "2008" ));
    rangeList- > addItem(QStringLiteral "2009" ));
    rangeList- > addItem(QStringLiteral "2010" ));
    rangeList- > addItem(QStringLiteral "2011" ));
    rangeList- > addItem(QStringLiteral "2012" ));
    rangeList- > addItem(QStringLiteral "2013" ));
    rangeList- > addItem(QStringLiteral "All" ));
    rangeList- > setCurrentIndex(8 );
    QCheckBox * axisTitlesVisibleCB =  new  QCheckBox - > setText(QStringLiteral "Axis titles visible" ));
    axisTitlesVisibleCB- > setChecked(true );
    QCheckBox * axisTitlesFixedCB =  new  QCheckBox - > setText(QStringLiteral "Axis titles fixed" ));
    axisTitlesFixedCB- > setChecked(true );
    QSlider * axisLabelRotationSlider =  new  QSlider Qt :: Horizontal,  widget);
    axisLabelRotationSlider- > setTickInterval(10 );
    axisLabelRotationSlider- > setTickPosition(QSlider :: TicksBelow);
    axisLabelRotationSlider- > setMinimum(0 );
    axisLabelRotationSlider- > setValue(30 );
    axisLabelRotationSlider- > setMaximum(90 );
    vLayout- > addWidget(new  QLabel QStringLiteral "Rotate horizontally" )));
    vLayout- > addWidget(rotationSliderX,  0 ,  Qt :: AlignTop);
    vLayout- > addWidget(new  QLabel QStringLiteral "Rotate vertically" )));
    vLayout- > addWidget(rotationSliderY,  0 ,  Qt :: AlignTop);
    vLayout- > addWidget(labelButton,  0 ,  Qt :: AlignTop);
    vLayout- > addWidget(cameraButton,  0 ,  Qt :: AlignTop);
    vLayout- > addWidget(zoomToSelectedButton,  0 ,  Qt :: AlignTop);
    vLayout- > addWidget(backgroundCheckBox);
    vLayout- > addWidget(gridCheckBox);
    vLayout- > addWidget(smoothCheckBox);
    vLayout- > addWidget(reflectionCheckBox);
    vLayout- > addWidget(seriesCheckBox);
    vLayout- > addWidget(reverseValueAxisCheckBox);
    vLayout- > addWidget(axisTitlesVisibleCB);
    vLayout- > addWidget(axisTitlesFixedCB);
    vLayout- > addWidget(new  QLabel QStringLiteral "Show year" )));
    vLayout- > addWidget(rangeList);
    vLayout- > addWidget(new  QLabel QStringLiteral "Change bar style" )));
    vLayout- > addWidget(barStyleList);
    vLayout- > addWidget(new  QLabel QStringLiteral "Change selection mode" )));
    vLayout- > addWidget(selectionModeList);
    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);
    vLayout- > addWidget(new  QLabel QStringLiteral "Adjust font size" )));
    vLayout- > addWidget(fontSizeSlider);
    vLayout- > addWidget(new  QLabel QStringLiteral "Axis label rotation" )));
    vLayout- > addWidget(axisLabelRotationSlider,  1 ,  Qt :: AlignTop);
    GraphModifier * modifier =  new  GraphModifier(widgetgraph);
    QObject :: connect(rotationSliderX,  & QSlider :: valueChanged,  modifier,  & GraphModifier:: rotateX);
    QObject :: connect(rotationSliderY,  & QSlider :: valueChanged,  modifier,  & GraphModifier:: rotateY);
    QObject :: connect(labelButton,  & QPushButton :: clicked,  modifier, 
                     & GraphModifier:: changeLabelBackground);
    QObject :: connect(cameraButton,  & QPushButton :: clicked,  modifier, 
                     & GraphModifier:: changePresetCamera);
    QObject :: connect(zoomToSelectedButton,  & QPushButton :: clicked,  modifier, 
                     & GraphModifier:: zoomToSelectedBar);
    QObject :: connect(backgroundCheckBox,  & QCheckBox :: stateChanged,  modifier, 
                     & GraphModifier:: setBackgroundEnabled);
    QObject :: connect(gridCheckBox,  & QCheckBox :: stateChanged,  modifier, 
                     & GraphModifier:: setGridEnabled);
    QObject :: connect(smoothCheckBox,  & QCheckBox :: stateChanged,  modifier, 
                     & GraphModifier:: setSmoothBars);
    QObject :: connect(seriesCheckBox,  & QCheckBox :: stateChanged,  modifier, 
                     & GraphModifier:: setSeriesVisibility);
    QObject :: connect(reverseValueAxisCheckBox,  & QCheckBox :: stateChanged,  modifier, 
                     & GraphModifier:: setReverseValueAxis);
    QObject :: connect(reflectionCheckBox,  & QCheckBox :: stateChanged,  modifier, 
                     & GraphModifier:: setReflection);
    QObject :: connect(modifier,  & GraphModifier:: backgroundEnabledChanged, 
                     backgroundCheckBox,  & QCheckBox :: setChecked);
    QObject :: connect(modifier,  & GraphModifier:: gridEnabledChanged, 
                     gridCheckBox,  & QCheckBox :: setChecked);
    QObject :: connect(rangeList,  SIGNAL(currentIndexChanged(int )),  modifier, 
                     SLOT(changeRange(int )));
    QObject :: connect(barStyleList,  SIGNAL(currentIndexChanged(int )),  modifier, 
                     SLOT(changeStyle(int )));
    QObject :: connect(selectionModeList,  SIGNAL(currentIndexChanged(int )),  modifier, 
                     SLOT(changeSelectionMode(int )));
    QObject :: connect(themeList,  SIGNAL(currentIndexChanged(int )),  modifier, 
                     SLOT(changeTheme(int )));
    QObject :: connect(shadowQuality,  SIGNAL(currentIndexChanged(int )),  modifier, 
                     SLOT(changeShadowQuality(int )));
    QObject :: connect(modifier,  & GraphModifier:: shadowQualityChanged,  shadowQuality, 
                     & QComboBox :: setCurrentIndex);
    QObject :: connect(widgetgraph,  & Q3DBars :: shadowQualityChanged,  modifier, 
                     & GraphModifier:: shadowQualityUpdatedByVisual);
    QObject :: connect(fontSizeSlider,  & QSlider :: valueChanged,  modifier, 
                     & GraphModifier:: changeFontSize);
    QObject :: connect(fontList,  & QFontComboBox :: currentFontChanged,  modifier, 
                     & GraphModifier:: changeFont);
    QObject :: connect(modifier,  & GraphModifier:: fontSizeChanged,  fontSizeSlider, 
                     & QSlider :: setValue);
    QObject :: connect(modifier,  & GraphModifier:: fontChanged,  fontList, 
                     & QFontComboBox :: setCurrentFont);
    QObject :: connect(axisTitlesVisibleCB,  & QCheckBox :: stateChanged,  modifier, 
                     & GraphModifier:: setAxisTitleVisibility);
    QObject :: connect(axisTitlesFixedCB,  & QCheckBox :: stateChanged,  modifier, 
                     & GraphModifier:: setAxisTitleFixed);
    QObject :: connect(axisLabelRotationSlider,  & QSlider :: valueChanged,  modifier, 
                     & GraphModifier:: changeLabelRotation);
    widget- > show();
    return  app. exec();
}