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 app(argc, argv);
Q3DBars * widgetgraph = new Q3DBars ();
QWidget * container = QWidget :: createWindowContainer(widgetgraph);
if (! widgetgraph- > hasContext()) {
QMessageBox msgBox;
msgBox. setText("Couldn't initialize the OpenGL context." );
msgBox. exec();
return - 1 ;
}
QSize screenSize = widgetgraph- > 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 ("Average temperatures in Oulu and Helsinki, Finland (2006-2013)" ));
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(0 );
QPushButton * labelButton = new QPushButton (widget);
labelButton- > setText(QStringLiteral ("Change label style" ));
QCheckBox * smoothCheckBox = new QCheckBox (widget);
smoothCheckBox- > setText(QStringLiteral ("Smooth bars" ));
smoothCheckBox- > setChecked(false );
QComboBox * barStyleList = new QComboBox (widget);
barStyleList- > 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 (widget);
cameraButton- > setText(QStringLiteral ("Change camera preset" ));
QPushButton * zoomToSelectedButton = new QPushButton (widget);
zoomToSelectedButton- > setText(QStringLiteral ("Zoom to selected bar" ));
QComboBox * selectionModeList = new QComboBox (widget);
selectionModeList- > 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 (widget);
backgroundCheckBox- > setText(QStringLiteral ("Show background" ));
backgroundCheckBox- > setChecked(false );
QCheckBox * gridCheckBox = new QCheckBox (widget);
gridCheckBox- > setText(QStringLiteral ("Show grid" ));
gridCheckBox- > setChecked(true );
QCheckBox * seriesCheckBox = new QCheckBox (widget);
seriesCheckBox- > setText(QStringLiteral ("Show second series" ));
seriesCheckBox- > setChecked(false );
QCheckBox * reverseValueAxisCheckBox = new QCheckBox (widget);
reverseValueAxisCheckBox- > setText(QStringLiteral ("Reverse value axis" ));
reverseValueAxisCheckBox- > setChecked(false );
QCheckBox * reflectionCheckBox = new QCheckBox (widget);
reflectionCheckBox- > 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 (widget);
fontList- > setCurrentFont(QFont ("Times New Roman" ));
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(5 );
QComboBox * rangeList = new QComboBox (widget);
rangeList- > 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 (widget);
axisTitlesVisibleCB- > setText(QStringLiteral ("Axis titles visible" ));
axisTitlesVisibleCB- > setChecked(true );
QCheckBox * axisTitlesFixedCB = new QCheckBox (widget);
axisTitlesFixedCB- > 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();
}