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();
}