很复杂的UI交互操作系统

时间:2024-10-10 07:41:48

 看了几天了,内存溢出的问题修复完成了,开源的项目Advanced-Docking-System想不到这么多问题,bugfix真要命,关键GitHub上stars还挺多的,原作者估计不想维护了,毕竟bug太多了

这几天把菜单理了一下,之前的作者写得太乱了,太难读了,代码冗余太多了,这几天再改bug,算当作学习之用吧

///
DockAreaTitleBar.cpp  只有TitleBar操作CDockAreaWidget
//============================================================================
void CDockAreaTitleBar::onPinGroupToActionClicked()//Pin Group to
{
    int Location = sender()->property(internal::LocationProperty).toInt();
    d->DockAreaWidget->toggleAutoHide((SideBarLocation)Location);
}

void CDockAreaWidget::toggleAutoHide(SideBarLocation Location)
{
    //if (!isAutoHideFeatureEnabled())已经启用了AutoHideFeatureEnabled
    //{
    //    return;
    //}

    setAutoHide(!isAutoHide(), Location);
}

/
//autohideTab.cpp,操作CDockWidget
//============================================================================
void CAutoHideTab::onUnpinActionClicked()
{//这个是鼠标右键弹出菜单Unpin的槽函数,参数false表示把一个autohide页面变成dock页面,位置默认为SideBarNone
    d->DockWidget->setAutoHide(false);
}
void CAutoHideTab::onPinToActionClicked()
{
    //这个是鼠标右键弹出菜单Pin to的Slots函数,参见上面的contextMenuEvent函数
    int Location = sender()->property(internal::LocationProperty).toInt();//Location由Pin to子菜单决定
    //pin一个autohide页面,位置为Location
    d->DockWidget->setAutoHide(true, (SideBarLocation)Location);
}


//DockWidgetTab.cpp,操作CDockWidget
//===========================================================================
void CDockWidgetTab::onPinToActionClicked()
{这个是鼠标右键弹出菜单Pin to的Slots函数,参见上面的contextMenuEvent函数
    int Location = sender()->property(internal::LocationProperty).toInt();
    d->DockWidget->toggleAutoHide((SideBarLocation)Location);
}

    void CDockWidget::toggleAutoHide(SideBarLocation Location)//called by CDockWidgetTab::pinAutoHideDockWidget()
    {
        //if (!CDockManager::testAutoHideConfigFlag(CDockManager::AutoHideFeatureEnabled))//zxb
        //{
        //    return;
        //}

        setAutoHide(!isAutoHide(), Location);
    }