main.cpp 范例文件
					 
					
						surface/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 "surfacegraph.h" 
#include <QtWidgets/QApplication> 
#include <QtWidgets/QWidget> 
#include <QtWidgets/QHBoxLayout> 
#include <QtWidgets/QVBoxLayout> 
#include <QtWidgets/QPushButton> 
#include <QtWidgets/QRadioButton> 
#include <QtWidgets/QSlider> 
#include <QtWidgets/QGroupBox> 
#include <QtWidgets/QComboBox> 
#include <QtWidgets/QLabel> 
#include <QtWidgets/QMessageBox> 
#include <QtGui/QPainter> 
#include <QtGui/QScreen> 
int  main(int  argc,  char  * * argv)
{
    QApplication   app(argc,  argv);
    Q3DSurface   * graph =  new  Q3DSurface  ();
    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.6 ));
    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);
    vLayout- > setAlignment(Qt :: AlignTop);
    widget- > setWindowTitle(QStringLiteral  ("Surface example" ));
    QGroupBox   * modelGroupBox =  new  QGroupBox  (QStringLiteral  ("Model" ));
    QRadioButton   * sqrtSinModelRB =  new  QRadioButton  (widget);
    sqrtSinModelRB- > setText(QStringLiteral  ("Sqrt && Sin" ));
    sqrtSinModelRB- > setChecked(false );
    QRadioButton   * heightMapModelRB =  new  QRadioButton  (widget);
    heightMapModelRB- > setText(QStringLiteral  ("Height Map" ));
    heightMapModelRB- > setChecked(false );
    QVBoxLayout   * modelVBox =  new  QVBoxLayout  ;
    modelVBox- > addWidget(sqrtSinModelRB);
    modelVBox- > addWidget(heightMapModelRB);
    modelGroupBox- > setLayout(modelVBox);
    QGroupBox   * selectionGroupBox =  new  QGroupBox  (QStringLiteral  ("Selection Mode" ));
    QRadioButton   * modeNoneRB =  new  QRadioButton  (widget);
    modeNoneRB- > setText(QStringLiteral  ("No selection" ));
    modeNoneRB- > setChecked(false );
    QRadioButton   * modeItemRB =  new  QRadioButton  (widget);
    modeItemRB- > setText(QStringLiteral  ("Item" ));
    modeItemRB- > setChecked(false );
    QRadioButton   * modeSliceRowRB =  new  QRadioButton  (widget);
    modeSliceRowRB- > setText(QStringLiteral  ("Row Slice" ));
    modeSliceRowRB- > setChecked(false );
    QRadioButton   * modeSliceColumnRB =  new  QRadioButton  (widget);
    modeSliceColumnRB- > setText(QStringLiteral  ("Column Slice" ));
    modeSliceColumnRB- > setChecked(false );
    QVBoxLayout   * selectionVBox =  new  QVBoxLayout  ;
    selectionVBox- > addWidget(modeNoneRB);
    selectionVBox- > addWidget(modeItemRB);
    selectionVBox- > addWidget(modeSliceRowRB);
    selectionVBox- > addWidget(modeSliceColumnRB);
    selectionGroupBox- > setLayout(selectionVBox);
    QSlider   * axisMinSliderX =  new  QSlider  (Qt :: Horizontal,  widget);
    axisMinSliderX- > setMinimum(0 );
    axisMinSliderX- > setTickInterval(1 );
    axisMinSliderX- > setEnabled(true );
    QSlider   * axisMaxSliderX =  new  QSlider  (Qt :: Horizontal,  widget);
    axisMaxSliderX- > setMinimum(1 );
    axisMaxSliderX- > setTickInterval(1 );
    axisMaxSliderX- > setEnabled(true );
    QSlider   * axisMinSliderZ =  new  QSlider  (Qt :: Horizontal,  widget);
    axisMinSliderZ- > setMinimum(0 );
    axisMinSliderZ- > setTickInterval(1 );
    axisMinSliderZ- > setEnabled(true );
    QSlider   * axisMaxSliderZ =  new  QSlider  (Qt :: Horizontal,  widget);
    axisMaxSliderZ- > setMinimum(1 );
    axisMaxSliderZ- > setTickInterval(1 );
    axisMaxSliderZ- > setEnabled(true );
    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" ));
    QGroupBox   * colorGroupBox =  new  QGroupBox  (QStringLiteral  ("Custom gradient" ));
    QLinearGradient   grBtoY(0 ,  0 ,  1 ,  100 );
    grBtoY. setColorAt(1.0 ,  Qt :: black);
    grBtoY. setColorAt(0.67 ,  Qt :: blue);
    grBtoY. setColorAt(0.33 ,  Qt :: red);
    grBtoY. setColorAt(0.0 ,  Qt :: yellow);
    QPixmap   pm(24 ,  100 );
    QPainter   pmp(& pm);
    pmp. setBrush(QBrush  (grBtoY));
    pmp. setPen(Qt :: NoPen);
    pmp. drawRect(0 ,  0 ,  24 ,  100 );
    QPushButton   * gradientBtoYPB =  new  QPushButton  (widget);
    gradientBtoYPB- > setIcon(QIcon  (pm));
    gradientBtoYPB- > setIconSize(QSize  (24 ,  100 ));
    QLinearGradient   grGtoR(0 ,  0 ,  1 ,  100 );
    grGtoR. setColorAt(1.0 ,  Qt :: darkGreen);
    grGtoR. setColorAt(0.5 ,  Qt :: yellow);
    grGtoR. setColorAt(0.2 ,  Qt :: red);
    grGtoR. setColorAt(0.0 ,  Qt :: darkRed);
    pmp. setBrush(QBrush  (grGtoR));
    pmp. drawRect(0 ,  0 ,  24 ,  100 );
    QPushButton   * gradientGtoRPB =  new  QPushButton  (widget);
    gradientGtoRPB- > setIcon(QIcon  (pm));
    gradientGtoRPB- > setIconSize(QSize  (24 ,  100 ));
    QHBoxLayout   * colorHBox =  new  QHBoxLayout  ;
    colorHBox- > addWidget(gradientBtoYPB);
    colorHBox- > addWidget(gradientGtoRPB);
    colorGroupBox- > setLayout(colorHBox);
    vLayout- > addWidget(modelGroupBox);
    vLayout- > addWidget(selectionGroupBox);
    vLayout- > addWidget(new  QLabel  (QStringLiteral  ("Column range" )));
    vLayout- > addWidget(axisMinSliderX);
    vLayout- > addWidget(axisMaxSliderX);
    vLayout- > addWidget(new  QLabel  (QStringLiteral  ("Row range" )));
    vLayout- > addWidget(axisMinSliderZ);
    vLayout- > addWidget(axisMaxSliderZ);
    vLayout- > addWidget(new  QLabel  (QStringLiteral  ("Theme" )));
    vLayout- > addWidget(themeList);
    vLayout- > addWidget(colorGroupBox);
    widget- > show();
    SurfaceGraph * modifier =  new  SurfaceGraph(graph);
    QObject :: connect(heightMapModelRB,  & QRadioButton :: toggled, 
                     modifier,  & SurfaceGraph:: enableHeightMapModel);
    QObject :: connect(sqrtSinModelRB,  & QRadioButton :: toggled, 
                     modifier,  & SurfaceGraph:: enableSqrtSinModel);
    QObject :: connect(modeNoneRB,  & QRadioButton :: toggled, 
                     modifier,  & SurfaceGraph:: toggleModeNone);
    QObject :: connect(modeItemRB,   & QRadioButton :: toggled, 
                     modifier,  & SurfaceGraph:: toggleModeItem);
    QObject :: connect(modeSliceRowRB,   & QRadioButton :: toggled, 
                     modifier,  & SurfaceGraph:: toggleModeSliceRow);
    QObject :: connect(modeSliceColumnRB,   & QRadioButton :: toggled, 
                     modifier,  & SurfaceGraph:: toggleModeSliceColumn);
    QObject :: connect(axisMinSliderX,  & QSlider :: valueChanged, 
                     modifier,  & SurfaceGraph:: adjustXMin);
    QObject :: connect(axisMaxSliderX,  & QSlider :: valueChanged, 
                     modifier,  & SurfaceGraph:: adjustXMax);
    QObject :: connect(axisMinSliderZ,  & QSlider :: valueChanged, 
                     modifier,  & SurfaceGraph:: adjustZMin);
    QObject :: connect(axisMaxSliderZ,  & QSlider :: valueChanged, 
                     modifier,  & SurfaceGraph:: adjustZMax);
    QObject :: connect(themeList,  SIGNAL(currentIndexChanged(int )), 
                     modifier,  SLOT(changeTheme(int )));
    QObject :: connect(gradientBtoYPB,  & QPushButton :: pressed, 
                     modifier,  & SurfaceGraph:: setBlackToYellowGradient);
    QObject :: connect(gradientGtoRPB,  & QPushButton :: pressed, 
                     modifier,  & SurfaceGraph:: setGreenToRedGradient);
    modifier- > setAxisMinSliderX(axisMinSliderX);
    modifier- > setAxisMaxSliderX(axisMaxSliderX);
    modifier- > setAxisMinSliderZ(axisMinSliderZ);
    modifier- > setAxisMaxSliderZ(axisMaxSliderZ);
    sqrtSinModelRB- > setChecked(true );
    modeItemRB- > setChecked(true );
    themeList- > setCurrentIndex(2 );
    return  app. exec();
}