Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 以编程方式取消禁用三个QdockWidget_Qt_Qt5_Qdockwidget - Fatal编程技术网

Qt 以编程方式取消禁用三个QdockWidget

Qt 以编程方式取消禁用三个QdockWidget,qt,qt5,qdockwidget,Qt,Qt5,Qdockwidget,我有一个带有三个dock小部件的应用程序。这些由以下代码创建: dock = new QDockWidget(tr("Some title")); dock->setWidget(some_widget); dock->setContextMenuPolicy(Qt::PreventContextMenu); dock->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);

我有一个带有三个dock小部件的应用程序。这些由以下代码创建:

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

tabifyDockWidget(dock1, dock2);
tabifyDockWidget(dock2, dock3);
然后,该窗口如下所示:

我可以通过拖放并排排列码头,使窗口如下所示:

我想用编程的方式来做这件事,但我不知道怎么做。当做一个

splitDockWidget(dock1, dock2, Qt::Horizontal);
什么也没发生。当做

splitDockWidget(dock1, dock2, Qt::Vertical);
dock1
dock2
消失,只有
dock3
仍然可见:

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


那么我做错了什么呢?

我找到了解决办法。问题是码头与哪个码头相连。我补充说

setDockNestingEnabled(true);
以及以下功能,如果需要,可通过首先更改dockarea来完成此工作:

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)