Вложение QDockWidgets - PullRequest
       12

Вложение QDockWidgets

0 голосов
/ 04 марта 2009

Прямо сейчас у меня есть четыре настроенных QDockWidgets в левой части моего приложения. Когда вы запускаете приложение, каждое из них является видимым, но очень маленьким из-за видимости каждого из них.

Я бы хотел, чтобы три из QDockWidgets располагались за одним основным, чтобы дать этому одному приоритету и всю левую часть экрана.

Кто-нибудь знает, как сказать QDockWidgets, чтобы они гнездились при их создании?

Ответы [ 5 ]

4 голосов
/ 17 августа 2009

Это можно сделать с помощью QMainWindow.tabifyDockWidget:

http://doc.qt.io/archives/4.6/qmainwindow.html#tabifyDockWidget

Это автоматически создаст вкладки, и вы можете выбрать каждый виджет-док при необходимости.

1 голос
/ 27 апреля 2010

Если вы не хотите табулировать свои QDockWidgets с помощью решения brianz ', просто используйте removeDockWidget и addDockWidget взаимозаменяемо, чтобы установить видимый виджет-док.

например. Если у вас есть док-станция 1 и док-станция 2:

При запуске:

g_Main->addDockWidget(Qt::LeftDockWidgetArea, dock1);

В некоторых действиях меню:

void MainWnd::ShowDock2(){
    g_Main->removeDockWidget(dock1);
    g_Main->addDockWidget(Qt::LeftDockWidgetArea, dock2);
    dock2->show();
}

В другом действии меню:

void MainWnd::ShowDock1(){
    g_Main->removeDockWidget(dock2);
    g_Main->addDockWidget(Qt::LeftDockWidgetArea, dock1);
    dock1->show();
}

Может быть упрощено, если вы унаследованы от QMainWindow и используете родительский класс для виджетов док-станции, чтобы автоматически отправлять сигналы при добавлении одного в док для удаления других из него

1 голос
/ 04 марта 2009

Это, вероятно, невозможно, поскольку QDockWidgets тесно интегрированы с QMainWindow.
За кулисами происходит то, что QMainWidow имеет основной макет, который содержит все QDocksWidgets, QToolbars и основной виджет.

Что может быть возможно, так это заставить один QDockWidget заменить другие или нарисовать поверх них. Вам нужно будет закопать abit в код QMainWindow, чтобы точно узнать, как это сделать, и, вероятно, унаследовать от QDockWidget, чего обычно не следует делать.

0 голосов
/ 21 августа 2010

Попробуйте:

QMainWindow :: setDockNestingEnabled (истина);

0 голосов
/ 04 марта 2009

Не уверен, что именно вы ищете. Может быть, вы могли бы использовать что-то вроде QStackedWidget в виджете Dock и использовать события перетаскивания для создания новых QDockWidgets или перемещения содержимого QDockWidget в новый QStackedWidget?

...