main.cpp 范例文件
volumetric/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 "volumetric.h"
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QRadioButton>
#include <QtWidgets/QSlider>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QLabel>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QMessageBox>
#include <QtGui/QScreen>
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() / 3 , screenSize. height() / 3 ));
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 ();
QVBoxLayout * vLayout2 = new QVBoxLayout ();
hLayout- > addWidget(container, 1 );
hLayout- > addLayout(vLayout);
hLayout- > addLayout(vLayout2);
widget- > setWindowTitle(QStringLiteral ("Volumetric object example - 3D terrain" ));
QCheckBox * sliceXCheckBox = new QCheckBox (widget);
sliceXCheckBox- > setText(QStringLiteral ("Slice volume on X axis" ));
sliceXCheckBox- > setChecked(false );
QCheckBox * sliceYCheckBox = new QCheckBox (widget);
sliceYCheckBox- > setText(QStringLiteral ("Slice volume on Y axis" ));
sliceYCheckBox- > setChecked(false );
QCheckBox * sliceZCheckBox = new QCheckBox (widget);
sliceZCheckBox- > setText(QStringLiteral ("Slice volume on Z axis" ));
sliceZCheckBox- > setChecked(false );
QSlider * sliceXSlider = new QSlider (Qt :: Horizontal, widget);
sliceXSlider- > setMinimum(0 );
sliceXSlider- > setMaximum(1024 );
sliceXSlider- > setValue(512 );
sliceXSlider- > setEnabled(true );
QSlider * sliceYSlider = new QSlider (Qt :: Horizontal, widget);
sliceYSlider- > setMinimum(0 );
sliceYSlider- > setMaximum(1024 );
sliceYSlider- > setValue(512 );
sliceYSlider- > setEnabled(true );
QSlider * sliceZSlider = new QSlider (Qt :: Horizontal, widget);
sliceZSlider- > setMinimum(0 );
sliceZSlider- > setMaximum(1024 );
sliceZSlider- > setValue(512 );
sliceZSlider- > setEnabled(true );
QCheckBox * fpsCheckBox = new QCheckBox (widget);
fpsCheckBox- > setText(QStringLiteral ("Show FPS" ));
fpsCheckBox- > setChecked(false );
QLabel * fpsLabel = new QLabel (QStringLiteral ("" ), widget);
QGroupBox * textureDetailGroupBox = new QGroupBox (QStringLiteral ("Texture detail" ));
QRadioButton * lowDetailRB = new QRadioButton (widget);
lowDetailRB- > setText(QStringLiteral ("Low (128x64x128)" ));
lowDetailRB- > setChecked(true );
QRadioButton * mediumDetailRB = new QRadioButton (widget);
mediumDetailRB- > setText(QStringLiteral ("Generating..." ));
mediumDetailRB- > setChecked(false );
mediumDetailRB- > setEnabled(false );
QRadioButton * highDetailRB = new QRadioButton (widget);
highDetailRB- > setText(QStringLiteral ("Generating..." ));
highDetailRB- > setChecked(false );
highDetailRB- > setEnabled(false );
QVBoxLayout * textureDetailVBox = new QVBoxLayout ;
textureDetailVBox- > addWidget(lowDetailRB);
textureDetailVBox- > addWidget(mediumDetailRB);
textureDetailVBox- > addWidget(highDetailRB);
textureDetailGroupBox- > setLayout(textureDetailVBox);
QGroupBox * areaGroupBox = new QGroupBox (QStringLiteral ("Show area" ));
QRadioButton * areaAllRB = new QRadioButton (widget);
areaAllRB- > setText(QStringLiteral ("Whole region" ));
areaAllRB- > setChecked(true );
QRadioButton * areaMineRB = new QRadioButton (widget);
areaMineRB- > setText(QStringLiteral ("The mine" ));
areaMineRB- > setChecked(false );
QRadioButton * areaMountainRB = new QRadioButton (widget);
areaMountainRB- > setText(QStringLiteral ("The mountain" ));
areaMountainRB- > setChecked(false );
QVBoxLayout * areaVBox = new QVBoxLayout ;
areaVBox- > addWidget(areaAllRB);
areaVBox- > addWidget(areaMineRB);
areaVBox- > addWidget(areaMountainRB);
areaGroupBox- > setLayout(areaVBox);
QCheckBox * colorTableCheckBox = new QCheckBox (widget);
colorTableCheckBox- > setText(QStringLiteral ("Alternate color table" ));
colorTableCheckBox- > setChecked(false );
QLabel * sliceImageXLabel = new QLabel (widget);
QLabel * sliceImageYLabel = new QLabel (widget);
QLabel * sliceImageZLabel = new QLabel (widget);
sliceImageXLabel- > setMinimumSize(QSize (200 , 100 ));
sliceImageYLabel- > setMinimumSize(QSize (200 , 200 ));
sliceImageZLabel- > setMinimumSize(QSize (200 , 100 ));
sliceImageXLabel- > setMaximumSize(QSize (200 , 100 ));
sliceImageYLabel- > setMaximumSize(QSize (200 , 200 ));
sliceImageZLabel- > setMaximumSize(QSize (200 , 100 ));
sliceImageXLabel- > setFrameShape(QFrame :: Box);
sliceImageYLabel- > setFrameShape(QFrame :: Box);
sliceImageZLabel- > setFrameShape(QFrame :: Box);
sliceImageXLabel- > setScaledContents(true );
sliceImageYLabel- > setScaledContents(true );
sliceImageZLabel- > setScaledContents(true );
QSlider * alphaMultiplierSlider = new QSlider (Qt :: Horizontal, widget);
alphaMultiplierSlider- > setMinimum(0 );
alphaMultiplierSlider- > setMaximum(139 );
alphaMultiplierSlider- > setValue(100 );
alphaMultiplierSlider- > setEnabled(true );
QLabel * alphaMultiplierLabel = new QLabel (QStringLiteral ("Alpha multiplier: 1.0" ));
QCheckBox * preserveOpacityCheckBox = new QCheckBox (widget);
preserveOpacityCheckBox- > setText(QStringLiteral ("Preserve opacity" ));
preserveOpacityCheckBox- > setChecked(true );
QCheckBox * transparentGroundCheckBox = new QCheckBox (widget);
transparentGroundCheckBox- > setText(QStringLiteral ("Transparent ground" ));
transparentGroundCheckBox- > setChecked(false );
QCheckBox * useHighDefShaderCheckBox = new QCheckBox (widget);
useHighDefShaderCheckBox- > setText(QStringLiteral ("Use HD shader" ));
useHighDefShaderCheckBox- > setChecked(true );
QLabel * performanceNoteLabel =
new QLabel (QStringLiteral (
"Note: A high end graphics card is\nrecommended with the HD shader\nwhen the volume contains a lot of\ntransparent areas." ));
performanceNoteLabel- > setFrameShape(QFrame :: Box);
QCheckBox * drawSliceFramesCheckBox = new QCheckBox (widget);
drawSliceFramesCheckBox- > setText(QStringLiteral ("Draw slice frames" ));
drawSliceFramesCheckBox- > setChecked(false );
vLayout- > addWidget(sliceXCheckBox);
vLayout- > addWidget(sliceXSlider);
vLayout- > addWidget(sliceImageXLabel);
vLayout- > addWidget(sliceYCheckBox);
vLayout- > addWidget(sliceYSlider);
vLayout- > addWidget(sliceImageYLabel);
vLayout- > addWidget(sliceZCheckBox);
vLayout- > addWidget(sliceZSlider);
vLayout- > addWidget(sliceImageZLabel);
vLayout- > addWidget(drawSliceFramesCheckBox, 1 , Qt :: AlignTop);
vLayout2- > addWidget(fpsCheckBox);
vLayout2- > addWidget(fpsLabel);
vLayout2- > addWidget(textureDetailGroupBox);
vLayout2- > addWidget(areaGroupBox);
vLayout2- > addWidget(colorTableCheckBox);
vLayout2- > addWidget(alphaMultiplierLabel);
vLayout2- > addWidget(alphaMultiplierSlider);
vLayout2- > addWidget(preserveOpacityCheckBox);
vLayout2- > addWidget(transparentGroundCheckBox);
vLayout2- > addWidget(useHighDefShaderCheckBox);
vLayout2- > addWidget(performanceNoteLabel, 1 , Qt :: AlignTop);
VolumetricModifier * modifier = new VolumetricModifier(graph);
modifier- > setFpsLabel(fpsLabel);
modifier- > setMediumDetailRB(mediumDetailRB);
modifier- > setHighDetailRB(highDetailRB);
modifier- > setSliceSliders(sliceXSlider, sliceYSlider, sliceZSlider);
modifier- > setSliceLabels(sliceImageXLabel, sliceImageYLabel, sliceImageZLabel);
modifier- > setAlphaMultiplierLabel(alphaMultiplierLabel);
modifier- > setTransparentGround(transparentGroundCheckBox- > isChecked());
QObject :: connect(fpsCheckBox, & QCheckBox :: stateChanged, modifier,
& VolumetricModifier:: setFpsMeasurement);
QObject :: connect(sliceXCheckBox, & QCheckBox :: stateChanged, modifier,
& VolumetricModifier:: sliceX);
QObject :: connect(sliceYCheckBox, & QCheckBox :: stateChanged, modifier,
& VolumetricModifier:: sliceY);
QObject :: connect(sliceZCheckBox, & QCheckBox :: stateChanged, modifier,
& VolumetricModifier:: sliceZ);
QObject :: connect(sliceXSlider, & QSlider :: valueChanged, modifier,
& VolumetricModifier:: adjustSliceX);
QObject :: connect(sliceYSlider, & QSlider :: valueChanged, modifier,
& VolumetricModifier:: adjustSliceY);
QObject :: connect(sliceZSlider, & QSlider :: valueChanged, modifier,
& VolumetricModifier:: adjustSliceZ);
QObject :: connect(lowDetailRB, & QRadioButton :: toggled, modifier,
& VolumetricModifier:: toggleLowDetail);
QObject :: connect(mediumDetailRB, & QRadioButton :: toggled, modifier,
& VolumetricModifier:: toggleMediumDetail);
QObject :: connect(highDetailRB, & QRadioButton :: toggled, modifier,
& VolumetricModifier:: toggleHighDetail);
QObject :: connect(colorTableCheckBox, & QCheckBox :: stateChanged, modifier,
& VolumetricModifier:: changeColorTable);
QObject :: connect(preserveOpacityCheckBox, & QCheckBox :: stateChanged, modifier,
& VolumetricModifier:: setPreserveOpacity);
QObject :: connect(transparentGroundCheckBox, & QCheckBox :: stateChanged, modifier,
& VolumetricModifier:: setTransparentGround);
QObject :: connect(useHighDefShaderCheckBox, & QCheckBox :: stateChanged, modifier,
& VolumetricModifier:: setUseHighDefShader);
QObject :: connect(alphaMultiplierSlider, & QSlider :: valueChanged, modifier,
& VolumetricModifier:: adjustAlphaMultiplier);
QObject :: connect(areaAllRB, & QRadioButton :: toggled, modifier,
& VolumetricModifier:: toggleAreaAll);
QObject :: connect(areaMineRB, & QRadioButton :: toggled, modifier,
& VolumetricModifier:: toggleAreaMine);
QObject :: connect(areaMountainRB, & QRadioButton :: toggled, modifier,
& VolumetricModifier:: toggleAreaMountain);
QObject :: connect(drawSliceFramesCheckBox, & QCheckBox :: stateChanged, modifier,
& VolumetricModifier:: setDrawSliceFrames);
widget- > show();
return app. exec();
}