Qt 以编程方式取消禁用三个QdockWidget
我有一个带有三个dock小部件的应用程序。这些由以下代码创建: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 = 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)以编程方式调用dockwidget时不需要代码>