Направете два QDockWidgets взаимно изключващи се на една и съща позиция

Имам два QDockWidget, само един от тях е видим по това време, управлявам това чрез toggleViewAction().

Това, което трябва да направя, е да искам двата QDockWidget да бъдат на едно и също място, с еднакъв размер и закачени в една и съща dockWidgetArea със същата ориентация и ред спрямо други QDockWidget.

Направих повечето от това с този код:

void myMainWindow::slotToggleDocks(QAction* action) {
    if(action == viewDock1) {
    Dock1->setFloating(Dock2->isFloating());
    Dock1->resize(Dock2->size());
    Dock1->restoreGeometry(Dock2->saveGeometry());
    Dock1->move(Dock2->pos());
    addDockWidget(dockWidgetArea(Dock2), Dock1);
    ...
        Dock2->hide();

    } else if(action == viewDock2) {
    Dock2->setFloating(Dock1->isFloating());
    Dock2->resize(Dock1->size());
    Dock2->restoreGeometry(Dock1->saveGeometry());
    Dock2->move(Dock1->pos());
    addDockWidget(dockWidgetArea(Dock2), Dock1);
    ...
        Dock1->hide();
    }
}

този код кара двете да имат едно и също местоположение и размер и да са закачени в една и съща област (ляво, дясно, ...), но не гарантира, че Docks ще имат същото оформление с другите QDockWidget в същата dockWidgetArea.

Значение, ако това беше предишното оформление:

http://holmez.net/qdockwidget/1.png

Това е след превключване:

http://holmez.net/qdockwidget/2.png

Ето какво искам:

http://holmez.net/qdockwidget/3.png


person Mahmoud Hassan    schedule 17.09.2013    source източник
comment
Искам да е: holmez.net/qdockwidget/3.png   -  person Mahmoud Hassan    schedule 17.09.2013
comment
Вмъкнах изображенията за вас и добавих снимката от вашите коментари. Изглежда обаче, че това е мъртва връзка. Трябва да работи, ако качите 3.png на този сървър.   -  person Tim Meyer    schedule 17.09.2013
comment
Поправих третото изображение. Благодаря Тим.   -  person Mahmoud Hassan    schedule 17.09.2013


Отговори (3)


Успях да направя това с прост трик, добавих този ред код:

splitDockWidget(Dock1,Dock2,Qt::Horizontal);

преди да скриете Dock1 и този ред:

splitDockWidget(Dock2,Dock1,Qt::Horizontal);

преди да скриете Dock2.

Това коригира проблема с подреждането на закачени джаджи, не съм сигурен дали това е най-добрият начин, но работи за мен.

person Mahmoud Hassan    schedule 19.09.2013

Какво ще кажете да използвате само 2 QDockWidgets, но да имате QStackedWidgets ВЪТРЕ в тях които можете да използвате за размяна на изгледи? Това е, което правя в момента и работи страхотно.

Друго предимство е, че размяната на изгледи е толкова проста, колкото:

    stackedWidget->setCurrentIndex(index);
person Taylor Brandstetter    schedule 17.09.2013
comment
Опитах го, но QStackedWidget не може да се плъзга или докира, някаква идея? - person Mahmoud Hassan; 19.09.2013

Какво ще кажете за използването на QTabWidget? Двете джаджи ще трябва да са в едно и също Qt::DockWidgetAreas

person Sara Barlo    schedule 11.10.2013
comment
Опитах го, но проблемът с QTabWidget е с неговите раздели, не искам тези раздели и същият проблем с QStackedWidgets и двата не могат да се движат, нито да се закачат. - person Mahmoud Hassan; 11.10.2013
comment
можете да добавите QTabWidget вътре в QDockWidget, за да можете да го местите и закрепвате, и можете да използвате персонализиран QTabBar, за да промените изгледа на разделите. - person Sara Barlo; 11.10.2013