// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "glwidget.h" #include "window.h" #include "mainwindow.h" #include #include #include #include #include #include #include Window::Window(MainWindow *mw) : mainWindow(mw) { glWidget = new GLWidget; xSlider = createSlider(); ySlider = createSlider(); zSlider = createSlider(); connect(xSlider, &QSlider::valueChanged, glWidget, &GLWidget::setXRotation); connect(glWidget, &GLWidget::xRotationChanged, xSlider, &QSlider::setValue); connect(ySlider, &QSlider::valueChanged, glWidget, &GLWidget::setYRotation); connect(glWidget, &GLWidget::yRotationChanged, ySlider, &QSlider::setValue); connect(zSlider, &QSlider::valueChanged, glWidget, &GLWidget::setZRotation); connect(glWidget, &GLWidget::zRotationChanged, zSlider, &QSlider::setValue); QVBoxLayout *mainLayout = new QVBoxLayout; QHBoxLayout *container = new QHBoxLayout; container->addWidget(glWidget); container->addWidget(xSlider); container->addWidget(ySlider); container->addWidget(zSlider); QWidget *w = new QWidget; w->setLayout(container); mainLayout->addWidget(w); dockBtn = new QPushButton(tr("Undock"), this); connect(dockBtn, &QPushButton::clicked, this, &Window::dockUndock); mainLayout->addWidget(dockBtn); setLayout(mainLayout); xSlider->setValue(15 * 16); ySlider->setValue(345 * 16); zSlider->setValue(0 * 16); setWindowTitle(tr("Hello GL")); } QSlider *Window::createSlider() { QSlider *slider = new QSlider(Qt::Vertical); slider->setRange(0, 360 * 16); slider->setSingleStep(16); slider->setPageStep(15 * 16); slider->setTickInterval(15 * 16); slider->setTickPosition(QSlider::TicksRight); return slider; } void Window::keyPressEvent(QKeyEvent *e) { if (e->key() == Qt::Key_Escape) close(); else QWidget::keyPressEvent(e); } void Window::dockUndock() { if (parent()) { setParent(nullptr); setAttribute(Qt::WA_DeleteOnClose); move(QGuiApplication::primaryScreen()->size().width() / 2 - width() / 2, QGuiApplication::primaryScreen()->size().height() / 2 - height() / 2); dockBtn->setText(tr("Dock")); show(); } else { if (!mainWindow->centralWidget()) { if (mainWindow->isVisible()) { setAttribute(Qt::WA_DeleteOnClose, false); dockBtn->setText(tr("Undock")); mainWindow->setCentralWidget(this); } else { QMessageBox::information(nullptr, tr("Cannot dock"), tr("Main window already closed")); } } else { QMessageBox::information(nullptr, tr("Cannot dock"), tr("Main window already occupied")); } } }