KDDockWidgets
KDDockWidgets copied to clipboard
Docking bug with nested main windows
I've created an MWE that has a QMainWindow
(level 0), that contains a KDDockWidgets::MainWindow
(level 1), which in turn contains two KDDockWidgets::MainWindow
(level 2). Docks in level 2 don't always work well: they only work in the KDDockWidgets::MainWindow
that was created last.
In the screenshots below kdRootADock0
was created first and then kdRootADock1
. kdRootADock1
can accept docks, but kdRootADock0
cannot.
I you move kdRootADock0
to a different main window, for instance kdRootB
in the code below, it accepts drops again.
Code:
#include <QApplication>
#include <QMainWindow>
#include <QTextEdit>
#include <kddockwidgets/DockWidget.h>
#include <kddockwidgets/MainWindow>
KDDockWidgets::MainWindow* createSubMainWindow(int counter) {
auto subName = QString::number(counter);
KDDockWidgets::MainWindow *mw = new KDDockWidgets::MainWindow{subName};
auto dock1 = new KDDockWidgets::DockWidget(subName + " dock 0");
auto dock2 = new KDDockWidgets::DockWidget(subName + " dock 1");
dock1->setWidget(new QTextEdit);
dock1->setWidget(new QTextEdit);
mw->addDockWidget(dock1, KDDockWidgets::Location::Location_OnRight);
mw->addDockWidget(dock2, KDDockWidgets::Location::Location_OnRight);
return mw;
}
int main(int argc, char* argv[]) {
QApplication app{argc, argv};
QMainWindow rootWindow;
KDDockWidgets::MainWindow *kdRootA = new KDDockWidgets::MainWindow{"kdRootA"};
rootWindow.setCentralWidget(kdRootA);
auto aDock1 = new KDDockWidgets::DockWidget("kdRootADock0");
auto aDock2 = new KDDockWidgets::DockWidget("kdRootADock1");
aDock1->setWidget(createSubMainWindow(0));
aDock2->setWidget(createSubMainWindow(1));
kdRootA->addDockWidget(aDock1, KDDockWidgets::Location::Location_OnRight);
kdRootA->addDockWidget(aDock2, KDDockWidgets::Location::Location_OnRight);
rootWindow.showMaximized();
rootWindow.show();
QMainWindow secondWindow;
KDDockWidgets::MainWindow *kdRootB = new KDDockWidgets::MainWindow{"kdRootB"};
secondWindow.setCentralWidget(kdRootB);
secondWindow.showMaximized();
secondWindow.show();
return app.exec();
}
cmake:
cmake_minimum_required(VERSION 3.3)
project(mwe)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
find_package(KDDockWidgets-qt6 CONFIG REQUIRED)
find_package(Qt6Widgets CONFIG REQUIRED)
add_executable(mwe main.cpp)
target_link_libraries(mwe Qt6::Widgets KDAB::kddockwidgets)
Tested on Kubuntu 20.04.2, Qt 6.1.3, various versions of KDDockWidgets including the latest master