2017-08-09 8 views
1

私は3つのDockウィジェットを持つアプリケーションを持っています。これらは、次のコードによって作成されます。プログラムで3つのQDockWidgetsをun-tabify

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); 

によってtabifiedされています Tabbed docks

私は側でドック側を手配することができますドラッグ&ドロップすると、ウィンドウは次のようになります。 side-by-side docks

私はこれをプログラム的にやりたいのですが、どうしたらいいか分かりません。

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

何も起こりません。

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

dock1dock2消えるをやって、そして唯一のdock3すると表示されたままです: dock1 and dock2 invisible

手動バックのメインウィンドウの外にドラッグした後、ウィンドウは次のようになります。 wrongly arranged docks

ここで私は何が間違っていますか?

答えて

0

私は解決策を見つけました。問題は、どのドックにドックが付いているかです。私は

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); 
} 
0

あなたは、1-> 3横長の1-> 2垂直右鎖splitDockWidget()を作成する必要があり、2-> 3横長、例えば

dock1 = new QDockWidget(tr("dock1")); 
dock2 = new QDockWidget(tr("dock2")); 
dock3 = new QDockWidget(tr("dock3")); 

dock1->setWidget(some_widget1); 
dock2->setWidget(some_widget2); 
dock3->setWidget(some_widget3); 

dock1->setContextMenuPolicy(Qt::PreventContextMenu); 

addDockWidget(Qt::LeftDockWidgetArea, dock1); 
addDockWidget(Qt::LeftDockWidgetArea, dock2); 
addDockWidget(Qt::RightDockWidgetArea, dock3); 

splitDockWidget(dock1, dock2, Qt::Vertical); 
splitDockWidget(dock1, dock3, Qt::Horizontal); 
splitDockWidget(dock2, dock3, Qt::Horizontal); 
+0

これは、私が唯一の代わりにdock1のDOCK3を参照してください違いを私に同じ結果を与えるが、他の2つのドックはまだ見えません...また、ドックをもう手で左から右に並べることはできません。 –

関連する問題