int main(int argc, char **argv) { QApplication app(argc, argv); Q3DSurface *graph = new Q3DSurface(); QWidget *container = QWidget::createWindowContainer(graph); 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("Interpolation")); QGroupBox *modelGroupBox = new QGroupBox(QStringLiteral("Mode")); QRadioButton *InitPlotModelRB = new QRadioButton(widget); InitPlotModelRB->setText(QStringLiteral("Initial plot")); InitPlotModelRB->setChecked(false); QRadioButton *InterpModelRB = new QRadioButton(widget); InterpModelRB->setText(QStringLiteral("Interpolating plot")); InterpModelRB->setChecked(false); QRadioButton *InitInterpModelRB = new QRadioButton(widget); InitInterpModelRB->setText(QStringLiteral("Initial and Interpolating plots")); InitInterpModelRB->setChecked(false); QRadioButton *ResidModelRB = new QRadioButton(widget); ResidModelRB->setText(QStringLiteral("Residual norm plot")); ResidModelRB->setChecked(false); QVBoxLayout *modelVBox = new QVBoxLayout; modelVBox->addWidget(InitPlotModelRB); modelVBox->addWidget(InterpModelRB); modelVBox->addWidget(InitInterpModelRB); modelVBox->addWidget(ResidModelRB); modelGroupBox->setLayout(modelVBox); 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); QLabel *countN = new QLabel(widget); QLabel *countM = new QLabel(widget); vLayout->addWidget(modelGroupBox); 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("Points at X axis"))); vLayout->addWidget(countN); vLayout->addWidget(new QLabel(QStringLiteral("Points at Z axis"))); vLayout->addWidget(countM); vLayout->addWidget(new QLabel(QStringLiteral("Press 1 to change the plot\n" "Press 2 to increase number of points at X axis\n" "Press 3 to decrease number of points at X axis\n" "Press 4 to increase number of points at Z axis\n" "Press 5 to decrease number of points at Z axis"))); widget->show(); SurfaceGraph *modifier = new SurfaceGraph(graph); modifier->key1 = new QShortcut(widget); modifier->key1->setKey(Qt::Key_1); QObject::connect(modifier->key1, SIGNAL(activated()), modifier, SLOT(slotShortcut1())); modifier->key2 = new QShortcut(widget); modifier->key2->setKey(Qt::Key_2); QObject::connect(modifier->key2, SIGNAL(activated()), modifier, SLOT(slotShortcut2())); modifier->key3 = new QShortcut(widget); modifier->key3->setKey(Qt::Key_3); QObject::connect(modifier->key3, SIGNAL(activated()), modifier, SLOT(slotShortcut3())); modifier->key4 = new QShortcut(widget); modifier->key4->setKey(Qt::Key_4); QObject::connect(modifier->key4, SIGNAL(activated()), modifier, SLOT(slotShortcut4())); modifier->key5 = new QShortcut(widget); modifier->key5->setKey(Qt::Key_5); QObject::connect(modifier->key5, SIGNAL(activated()), modifier, SLOT(slotShortcut5())); QObject::connect(InitPlotModelRB, &QRadioButton::toggled, modifier, &SurfaceGraph::enableInitPlotModel); QObject::connect(InterpModelRB, &QRadioButton::toggled, modifier, &SurfaceGraph::enableInterpModel); QObject::connect(InitInterpModelRB, &QRadioButton::toggled, modifier, &SurfaceGraph::enableInitInterpModel); QObject::connect(ResidModelRB, &QRadioButton::toggled, modifier, &SurfaceGraph::enableResidModel); 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); modifier->setAxisMinSliderX(axisMinSliderX); modifier->setAxisMaxSliderX(axisMaxSliderX); modifier->setAxisMinSliderZ(axisMinSliderZ); modifier->setAxisMaxSliderZ(axisMaxSliderZ); InitPlotModelRB->setChecked(true); modifier->setCount(countN, countM); modifier->setMode(InitPlotModelRB, InterpModelRB, InitInterpModelRB, ResidModelRB); return app.exec(); }
int main(int argc, char **argv) { QApplication app(argc, argv); Q3DSurface *graph = new Q3DSurface(); QWidget *container = QWidget::createWindowContainer(graph); 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->addLayout(vLayout); hLayout->addWidget(container, 1); vLayout->setAlignment(Qt::AlignTop); widget->setWindowTitle(QStringLiteral("Интерполяция")); QGroupBox *modelGroupBox = new QGroupBox(QStringLiteral("Графики")); QRadioButton *InitPlotModelRB = new QRadioButton(widget); InitPlotModelRB->setText(QStringLiteral("Начальный график")); InitPlotModelRB->setChecked(false); QRadioButton *InterpModelRB = new QRadioButton(widget); InterpModelRB->setText(QStringLiteral("Интерполяция")); InterpModelRB->setChecked(false); QRadioButton *InitInterpModelRB = new QRadioButton(widget); InitInterpModelRB->setText(QStringLiteral("Изначальный и интерполяция")); InitInterpModelRB->setChecked(false); QRadioButton *ResidModelRB = new QRadioButton(widget); ResidModelRB->setText(QStringLiteral("Невязка")); ResidModelRB->setChecked(false); QVBoxLayout *modelVBox = new QVBoxLayout; modelVBox->addWidget(InitPlotModelRB); modelVBox->addWidget(InterpModelRB); modelVBox->addWidget(InitInterpModelRB); modelVBox->addWidget(ResidModelRB); modelGroupBox->setLayout(modelVBox); QLabel *countN = new QLabel(widget); QLabel *countM = new QLabel(widget); vLayout->addWidget(modelGroupBox); vLayout->addWidget(new QLabel(QStringLiteral("точек на оси Х"))); vLayout->addWidget(countN); vLayout->addWidget(new QLabel(QStringLiteral("точек на оси Z"))); vLayout->addWidget(countM); vLayout->addWidget((new QLabel(QStringLiteral("1-графики\n" "2-больше точек на Х\n" "3-больше точек на Z\n" "4-увеличить диапазон X\n" "5-уменьшить диапазон X\n" "6-увеличить диапазон Z\n" "7-уменьшить диапазон Z\n" "8-меньше точек на X\n" "9-меньше точек на Z")))); widget->show(); SurfaceGraph *modifier = new SurfaceGraph(graph); modifier->key1 = new QShortcut(widget); modifier->key1->setKey(Qt::Key_1); QObject::connect(modifier->key1, SIGNAL(activated()), modifier, SLOT(slotShortcut1())); modifier->key2 = new QShortcut(widget); modifier->key2->setKey(Qt::Key_2); QObject::connect(modifier->key2, SIGNAL(activated()), modifier, SLOT(slotShortcut2())); modifier->key3 = new QShortcut(widget); modifier->key3->setKey(Qt::Key_3); QObject::connect(modifier->key3, SIGNAL(activated()), modifier, SLOT(slotShortcut3())); modifier->key4 = new QShortcut(widget); modifier->key4->setKey(Qt::Key_4); QObject::connect(modifier->key4, SIGNAL(activated()), modifier, SLOT(slotShortcut4())); modifier->key5 = new QShortcut(widget); modifier->key5->setKey(Qt::Key_5); QObject::connect(modifier->key5, SIGNAL(activated()), modifier, SLOT(slotShortcut5())); modifier->key6 = new QShortcut(widget); modifier->key6->setKey(Qt::Key_6); QObject::connect(modifier->key6, SIGNAL(activated()), modifier, SLOT(slotShortcut6())); modifier->key7 = new QShortcut(widget); modifier->key7->setKey(Qt::Key_7); QObject::connect(modifier->key7, SIGNAL(activated()), modifier, SLOT(slotShortcut7())); modifier->key8 = new QShortcut(widget); modifier->key8->setKey(Qt::Key_8); QObject::connect(modifier->key8, SIGNAL(activated()), modifier, SLOT(slotShortcut8())); modifier->key9 = new QShortcut(widget); modifier->key9->setKey(Qt::Key_9); QObject::connect(modifier->key9, SIGNAL(activated()), modifier, SLOT(slotShortcut9())); QObject::connect(InitPlotModelRB, &QRadioButton::toggled, modifier, &SurfaceGraph::enableInitPlotModel); QObject::connect(InterpModelRB, &QRadioButton::toggled, modifier, &SurfaceGraph::enableInterpModel); QObject::connect(InitInterpModelRB, &QRadioButton::toggled, modifier, &SurfaceGraph::enableInitInterpModel); QObject::connect(ResidModelRB, &QRadioButton::toggled, modifier, &SurfaceGraph::enableResidModel); InitPlotModelRB->setChecked(true); modifier->setCount(countN, countM); modifier->setKol(InitPlotModelRB,InterpModelRB, InitInterpModelRB,ResidModelRB); //изначально выставим точки return app.exec(); }
int main(int argc, char **argv) { //! [0] QApplication app(argc, argv); Q3DSurface *graph = new Q3DSurface(); QWidget *container = QWidget::createWindowContainer(graph); //! [0] 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); //! [1] QWidget *widget = new QWidget; QHBoxLayout *hLayout = new QHBoxLayout(widget); QVBoxLayout *vLayout = new QVBoxLayout(); hLayout->addWidget(container, 1); hLayout->addLayout(vLayout); vLayout->setAlignment(Qt::AlignTop); //! [1] 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(); }