diff options
author | Friedemann Kleint <[email protected]> | 2023-09-12 15:03:48 +0200 |
---|---|---|
committer | Friedemann Kleint <[email protected]> | 2023-09-18 22:45:36 +0200 |
commit | 6f8398c8eb5476a6e98126d5b63421896b874271 (patch) | |
tree | 36c8b47d556dec0965410ddd269c3588fc050a72 /examples/opengl | |
parent | 5641a5e1e54c9694a1ba1d462165db9c7c0e529c (diff) |
hellogl2 example: Streamline code
- Shorten menu code, add keyboard shortcuts and a quit action.
- Avoid calls to setLayout().
- Pass a parent to message boxes.
- Use the current screen for size calculation and consider
availableGeometry().
- Prevent closing by the Escape key in docked mode.
- Split the dockUndock() function into dock()/undock() for clarity
Pick-to: 6.6 6.5
Change-Id: I007da3bff86ee3f2dc8f87379e5d2ba2f0f6f3d7
Reviewed-by: Laszlo Agocs <[email protected]>
Diffstat (limited to 'examples/opengl')
-rw-r--r-- | examples/opengl/hellogl2/mainwindow.cpp | 16 | ||||
-rw-r--r-- | examples/opengl/hellogl2/window.cpp | 63 | ||||
-rw-r--r-- | examples/opengl/hellogl2/window.h | 2 |
3 files changed, 45 insertions, 36 deletions
diff --git a/examples/opengl/hellogl2/mainwindow.cpp b/examples/opengl/hellogl2/mainwindow.cpp index 2416fd6057e..4ec8fcb8b10 100644 --- a/examples/opengl/hellogl2/mainwindow.cpp +++ b/examples/opengl/hellogl2/mainwindow.cpp @@ -3,19 +3,19 @@ #include "mainwindow.h" #include "window.h" +#include <QApplication> +#include <QKeySequence> #include <QMenuBar> #include <QMenu> #include <QMessageBox> MainWindow::MainWindow() { - QMenuBar *menuBar = new QMenuBar; - QMenu *menuWindow = menuBar->addMenu(tr("&Window")); - QAction *addNew = new QAction(menuWindow); - addNew->setText(tr("Add new")); - menuWindow->addAction(addNew); - connect(addNew, &QAction::triggered, this, &MainWindow::onAddNew); - setMenuBar(menuBar); + QMenu *menuWindow = menuBar()->addMenu(tr("&Window")); + menuWindow->addAction(tr("Add new"), QKeySequence(Qt::CTRL | Qt::Key_N), + this, &MainWindow::onAddNew); + menuWindow->addAction(tr("Quit"), QKeySequence(Qt::CTRL | Qt::Key_Q), + qApp, QApplication::closeAllWindows); onAddNew(); } @@ -25,6 +25,6 @@ void MainWindow::onAddNew() if (!centralWidget()) setCentralWidget(new Window(this)); else - QMessageBox::information(nullptr, tr("Cannot add new window"), + QMessageBox::information(this, tr("Cannot Add New Window"), tr("Already occupied. Undock first.")); } diff --git a/examples/opengl/hellogl2/window.cpp b/examples/opengl/hellogl2/window.cpp index 055dd5b5e37..2f9c33b24e0 100644 --- a/examples/opengl/hellogl2/window.cpp +++ b/examples/opengl/hellogl2/window.cpp @@ -28,22 +28,19 @@ Window::Window(MainWindow *mw) connect(zSlider, &QSlider::valueChanged, glWidget, &GLWidget::setZRotation); connect(glWidget, &GLWidget::zRotationChanged, zSlider, &QSlider::setValue); - QVBoxLayout *mainLayout = new QVBoxLayout; - QHBoxLayout *container = new QHBoxLayout; + QVBoxLayout *mainLayout = new QVBoxLayout(this); + QWidget *w = new QWidget; + QHBoxLayout *container = new QHBoxLayout(w); 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); @@ -64,7 +61,7 @@ QSlider *Window::createSlider() void Window::keyPressEvent(QKeyEvent *e) { - if (e->key() == Qt::Key_Escape) + if (isWindow() && e->key() == Qt::Key_Escape) close(); else QWidget::keyPressEvent(e); @@ -72,26 +69,36 @@ void Window::keyPressEvent(QKeyEvent *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")); - } + if (parent()) + undock(); + else + dock(); +} + +void Window::dock() +{ + if (!mainWindow->isVisible()) { + QMessageBox::information(this, tr("Cannot Dock"), + tr("Main window already closed")); + return; + } + if (mainWindow->centralWidget()) { + QMessageBox::information(this, tr("Cannot Dock"), + tr("Main window already occupied")); + return; } + setAttribute(Qt::WA_DeleteOnClose, false); + dockBtn->setText(tr("Undock")); + mainWindow->setCentralWidget(this); +} + +void Window::undock() +{ + setParent(nullptr); + setAttribute(Qt::WA_DeleteOnClose); + const auto geometry = screen()->availableGeometry(); + move(geometry.x() + (geometry.width() - width()) / 2, + geometry.y() + (geometry.height() - height()) / 2); + dockBtn->setText(tr("Dock")); + show(); } diff --git a/examples/opengl/hellogl2/window.h b/examples/opengl/hellogl2/window.h index 2099bc119ae..3fd64086ec7 100644 --- a/examples/opengl/hellogl2/window.h +++ b/examples/opengl/hellogl2/window.h @@ -26,6 +26,8 @@ private slots: void dockUndock(); private: + void dock(); + void undock(); QSlider *createSlider(); GLWidget *glWidget; |