hellogl2 example: Decouple mainwindow from window

The circular dependency cannot be ported to the corresponding Python
example.

Task-number: PYSIDE-2206
Pick-to: 6.6 6.5
Change-Id: I031b3fffdd7bd677d2fc55e132975a65f66ad128
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
This commit is contained in:
Friedemann Kleint 2023-09-12 15:32:51 +02:00
parent 6f8398c8eb
commit 62eaaeb4f5
3 changed files with 16 additions and 9 deletions

View File

@ -23,7 +23,7 @@ MainWindow::MainWindow()
void MainWindow::onAddNew()
{
if (!centralWidget())
setCentralWidget(new Window(this));
setCentralWidget(new Window);
else
QMessageBox::information(this, tr("Cannot Add New Window"),
tr("Already occupied. Undock first."));

View File

@ -1,9 +1,8 @@
// 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 "glwidget.h"
#include <QSlider>
#include <QVBoxLayout>
#include <QHBoxLayout>
@ -11,9 +10,18 @@
#include <QPushButton>
#include <QApplication>
#include <QMessageBox>
#include <QMainWindow>
Window::Window(MainWindow *mw)
: mainWindow(mw)
static QMainWindow *findMainWindow()
{
for (auto *w : QApplication::topLevelWidgets()) {
if (auto *mw = qobject_cast<QMainWindow *>(w))
return mw;
}
return nullptr;
}
Window::Window()
{
glWidget = new GLWidget;
@ -77,7 +85,8 @@ void Window::dockUndock()
void Window::dock()
{
if (!mainWindow->isVisible()) {
auto *mainWindow = findMainWindow();
if (mainWindow == nullptr || !mainWindow->isVisible()) {
QMessageBox::information(this, tr("Cannot Dock"),
tr("Main window already closed"));
return;

View File

@ -10,14 +10,13 @@ QT_FORWARD_DECLARE_CLASS(QSlider)
QT_FORWARD_DECLARE_CLASS(QPushButton)
class GLWidget;
class MainWindow;
class Window : public QWidget
{
Q_OBJECT
public:
Window(MainWindow *mw);
Window();
protected:
void keyPressEvent(QKeyEvent *event) override;
@ -35,7 +34,6 @@ private:
QSlider *ySlider;
QSlider *zSlider;
QPushButton *dockBtn;
MainWindow *mainWindow;
};
#endif