githubuser0xFFFF / Qt-Advanced-Docking-System

Advanced Docking System for Qt
GNU Lesser General Public License v2.1
1.8k stars 539 forks source link

Random crush when calling restoreState #618

Closed vlomov closed 5 months ago

vlomov commented 5 months ago

patch.txt try apply this to AutoHideExample mainwindow.cpp, compile and run. Click Run!!! button on toolbar MSVC 19 Qt 6.6.2 Release

githubuser0xFFFF commented 5 months ago

You should not call restoreState() multiple times without giving the ui the possibility to update its state. I do not consider this a bug. If you split the update into two separate update actions, it works perfectly:

    auto * action = new QAction("Run!!!");
    action->connect(action, &QAction::triggered,
                    [this]() {
        DockManager->restoreState(
            {   R"(<?xml version="1.0" encoding="UTF-8"?><QtAdvancedDockingSystem Version="1" UserVersion="0" Containers="1" CentralWidget="CentralWidget"><Container Floating="0"><Splitter Orientation="|" Count="2"><Area Tabs="1" Current="Table 1"><Widget Name="Table 1" Closed="0"/></Area><Splitter Orientation="-" Count="1"><Splitter Orientation="|" Count="2"><Area Tabs="1" Current="CentralWidget" AllowedAreas="f" Flags="1"><Widget Name="CentralWidget" Closed="0"/></Area><Area Tabs="1" Current="Properties"><Widget Name="Properties" Closed="0"/></Area><Sizes>734 256 </Sizes></Splitter><Sizes>707 </Sizes></Splitter><Sizes>256 995 </Sizes></Splitter><SideBar Area="1" Tabs="1"><Widget Name="Table 2" Closed="0" Size="100"/></SideBar></Container></QtAdvancedDockingSystem>)"});
        //DockManager->restoreState(
            //{   R"(<?xml version="1.0" encoding="UTF-8"?><QtAdvancedDockingSystem Version="1" UserVersion="0" Containers="1" CentralWidget="CentralWidget"><Container Floating="0"><Splitter Orientation="|" Count="2"><Area Tabs="1" Current="Table 2"><Widget Name="Table 2" Closed="0"/></Area><Splitter Orientation="-" Count="1"><Splitter Orientation="|" Count="2"><Area Tabs="1" Current="CentralWidget" AllowedAreas="f" Flags="1"><Widget Name="CentralWidget" Closed="0"/></Area><Area Tabs="1" Current="Properties"><Widget Name="Properties" Closed="0"/></Area><Sizes>734 256 </Sizes></Splitter><Sizes>707 </Sizes></Splitter><Sizes>256 995 </Sizes></Splitter><SideBar Area="1" Tabs="1"><Widget Name="Table 1" Closed="0" Size="272"/></SideBar></Container></QtAdvancedDockingSystem>)"});
    });
    ui->toolBar->addAction(action);

    action = new QAction("Run2!!!");
    action->connect(action, &QAction::triggered,
                    [this]() {
        //DockManager->restoreState(
            //{   R"(<?xml version="1.0" encoding="UTF-8"?><QtAdvancedDockingSystem Version="1" UserVersion="0" Containers="1" CentralWidget="CentralWidget"><Container Floating="0"><Splitter Orientation="|" Count="2"><Area Tabs="1" Current="Table 1"><Widget Name="Table 1" Closed="0"/></Area><Splitter Orientation="-" Count="1"><Splitter Orientation="|" Count="2"><Area Tabs="1" Current="CentralWidget" AllowedAreas="f" Flags="1"><Widget Name="CentralWidget" Closed="0"/></Area><Area Tabs="1" Current="Properties"><Widget Name="Properties" Closed="0"/></Area><Sizes>734 256 </Sizes></Splitter><Sizes>707 </Sizes></Splitter><Sizes>256 995 </Sizes></Splitter><SideBar Area="1" Tabs="1"><Widget Name="Table 2" Closed="0" Size="100"/></SideBar></Container></QtAdvancedDockingSystem>)"});
        DockManager->restoreState(
            {   R"(<?xml version="1.0" encoding="UTF-8"?><QtAdvancedDockingSystem Version="1" UserVersion="0" Containers="1" CentralWidget="CentralWidget"><Container Floating="0"><Splitter Orientation="|" Count="2"><Area Tabs="1" Current="Table 2"><Widget Name="Table 2" Closed="0"/></Area><Splitter Orientation="-" Count="1"><Splitter Orientation="|" Count="2"><Area Tabs="1" Current="CentralWidget" AllowedAreas="f" Flags="1"><Widget Name="CentralWidget" Closed="0"/></Area><Area Tabs="1" Current="Properties"><Widget Name="Properties" Closed="0"/></Area><Sizes>734 256 </Sizes></Splitter><Sizes>707 </Sizes></Splitter><Sizes>256 995 </Sizes></Splitter><SideBar Area="1" Tabs="1"><Widget Name="Table 1" Closed="0" Size="272"/></SideBar></Container></QtAdvancedDockingSystem>)"});
    });
    ui->toolBar->addAction(action);