【问题标题】:Un-tabify three QDockWidgets programmatically以编程方式取消三个 QDockWidgets
【发布时间】:2018-01-17 09:12:14
【问题描述】:

我有一个包含三个停靠小部件的应用程序。这些是由以下代码创建的:

dock = new QDockWidget(tr("Some title"));
dock->setWidget(some_widget);
dock->setContextMenuPolicy(Qt::PreventContextMenu);
dock->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);
addDockWidget(Qt::TopDockWidgetArea, dock);

dock2dock3 然后被标签化

tabifyDockWidget(dock1, dock2);
tabifyDockWidget(dock2, dock3);

然后窗口如下所示:

我可以通过拖放并排排列停靠点,使窗口看起来像这样:

我想以编程方式执行此操作,但我不知道如何操作。当做一个

splitDockWidget(dock1, dock2, Qt::Horizontal);

什么都没有发生。做的时候

splitDockWidget(dock1, dock2, Qt::Vertical);

dock1dock2 消失,只有 dock3 仍然可见:

手动将其拖出主窗口并重新拉入后,窗口如下所示:

那么我在这里做错了什么?

【问题讨论】:

    标签: qt qt5 qdockwidget


    【解决方案1】:

    我找到了解决方案。问题是码头连接到哪个码头区。我加了

    setDockNestingEnabled(true);
    

    以及以下功能,如果需要,首先更改停靠区来完成工作:

    void MainWindow::attachDocks(Qt::DockWidgetArea area)
    {
        m_playersDock->setFloating(false);
        m_scoreDock->setFloating(false);
        m_rankingDock->setFloating(false);
        addDockWidget(area, m_playersDock);
        addDockWidget(area, m_scoreDock);
        addDockWidget(area, m_rankingDock);
    }
    
    void MainWindow::arrangeTabified()
    {
        attachDocks(Qt::TopDockWidgetArea);
        tabifyDockWidget(m_playersDock, m_scoreDock);
        tabifyDockWidget(m_scoreDock, m_rankingDock);
    }
    
    void MainWindow::arrangeHorizontally()
    {
        attachDocks(Qt::TopDockWidgetArea);
        splitDockWidget(m_playersDock, m_scoreDock, Qt::Horizontal);
        splitDockWidget(m_scoreDock, m_rankingDock, Qt::Horizontal);
    }
    
    void MainWindow::arrangeVertically()
    {
        attachDocks(Qt::LeftDockWidgetArea);
        splitDockWidget(m_playersDock, m_scoreDock, Qt::Vertical);
        splitDockWidget(m_scoreDock, m_rankingDock, Qt::Vertical);
    }
    
    void MainWindow::arrangeOwnWindow()
    {
        m_playersDock->setFloating(true);
        m_scoreDock->setFloating(true);
        m_rankingDock->setFloating(true);
    }
    

    【讨论】:

    • setDockNestingEnabled(true); 以编程方式对齐dockwidgets时不需要
    猜你喜欢
    • 1970-01-01
    • 2010-11-06
    • 2013-07-23
    • 2013-02-15
    • 2013-09-21
    • 1970-01-01
    • 2016-04-27
    • 2011-06-26
    • 2015-02-17
    相关资源
    最近更新 更多