forked from mfreiholz/Qt-Advanced-Docking-System
-
Notifications
You must be signed in to change notification settings - Fork 639
Closed
Description
Issue Description
When using OpenGL (QOpenGLWidget or QOpenGLWindow) within the Qt Advanced Docking System alongside QWebEngineView, the application crashes under specific reordering conditions.
This happens when there is a stack of five widgets with an OpenGL-based widget in the middle and QWebEngineView at the bottom. If a widget below the OpenGL widget is dragged across the OpenGL widget and docked to the top, and then the OpenGL widget is docked above, the application crashes.
Steps to Reproduce
- Create a dock layout with a stack of five dock widgets.
- Insert a QOpenGLWidget or QOpenGLWindow in the middle of the stack.
- Add a QWebEngineView as the bottom-most widget.
- Drag the widget immediately below the OpenGL widget upward across it and dock it to the top.
- Then drag the OpenGL widget and dock it above the previous one.
Environment
- Operating System: [Windows 11]
- Qt Version: [6.5.3]
- OpenGL Version: [4.6]
- Qt-Advanced-Docking-System Version: [latest]
Demo
Minimal Reproducible Example:
#include <QApplication>
#include <QOpenGLWidget>
#include <QMainWindow>
#include <QtWebEngineWidgets>
#include <DockManager.h>
class MainWindow : public QMainWindow
{
public:
MainWindow()
{
m_DockManager = new ads::CDockManager(this);
QWebEngineView* w1 = new QWebEngineView();
QWebEngineView* w2 = new QWebEngineView();
QOpenGLWidget* glWidget = new QOpenGLWidget();
QWidget* w3 = new QWidget();
QWidget* w4 = new QWidget();
ads::CDockWidget* dw1 = new ads::CDockWidget("WebView 1");
dw1->setWidget(w1);
ads::CDockWidget* dw2 = new ads::CDockWidget("Widget 1");
dw2->setWidget(w2);
ads::CDockWidget* glDw = new ads::CDockWidget("OpenGL");
glDw->setWidget(glWidget);
ads::CDockWidget* dw3 = new ads::CDockWidget("Widget 2");
dw3->setWidget(w3);
ads::CDockWidget* dw4 = new ads::CDockWidget("Widget 3");
dw4->setWidget(w4);
m_DockManager->addDockWidget(ads::TopDockWidgetArea, dw1);
m_DockManager->addDockWidget(ads::TopDockWidgetArea, dw2);
m_DockManager->addDockWidget(ads::TopDockWidgetArea, glDw);
m_DockManager->addDockWidget(ads::TopDockWidgetArea, dw3);
m_DockManager->addDockWidget(ads::TopDockWidgetArea, dw4);
}
private:
ads::CDockManager* m_DockManager;
};
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
MainWindow window;
window.show();
return app.exec();
}
Metadata
Metadata
Assignees
Labels
No labels