2009-03-04 5 views
0

Im Moment habe ich vier benutzerdefinierte QDockWidgets auf der linken Seite meiner Anwendung. Wenn Sie die Anwendung starten, ist jeder sichtbar, aber sehr klein, da jeder sichtbar ist.Verschachteln QDockWidgets

Ich möchte für drei der QDockWidgets nach einem primären Nest, um diese eine Priorität und die gesamte linke Seite des Bildschirms zu geben.

Kann jemand sagen, QDockWidgets zu verschachteln, wenn sie erstellt werden?

Antwort

1

Dies ist wahrscheinlich nicht möglich, da QDockWidgets stark in QMainWindow integriert sind.
Was hinter den Kulissen passiert, ist, dass QMainWidow ein Hauptlayout hat, das alle QDocksWidgets, QToolbars und das Hauptwidget enthält.

Was möglich ist, ist irgendwie zu machen, ein QDockWidget ersetzen die anderen oder über sie gezogen werden. Sie müssen etwas in den QMainWindow-Code schreiben, um genau zu sehen, wie Sie das tun und wahrscheinlich von QDockWidget erben, was Sie normalerweise nicht tun sollten.

0

Nicht sicher, was genau Sie suchen. Vielleicht könnten Sie etwas wie ein QStackedWidget im Dock-Widget verwenden und Drag & Drop-Ereignisse verwenden, um neue QDockWidgets zu erstellen oder den Inhalt eines QDockWidget in ein neues QStackedWidget zu verschieben?

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

Diese Registerkarten erstellt automatisch, und Sie können jedes Dock-Widget wählen je nach Bedarf:

3

Dies kann mit QMainWindow.tabifyDockWidget erreicht werden.

1

Wenn Sie Ihre QDockWidgets nicht mit einer Brianz-Lösung tabfizieren möchten, verwenden Sie einfach removeDockWidget und addDockWidget, um das sichtbare Dock-Widget zu setzen.

z.B. Wenn Sie DOCK1 und dock2:

Bei starup:

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

Auf einiger Menüaktion:

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

Auf einer anderen Menü Aktion:

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

könnte, wenn vereinfacht werden Sie leiten von QMainWindow ab und verwenden eine Elternklasse für die Dock-Widgets zu automatica lly Signale aussenden, wenn man zum Dock hinzugefügt wird, die andere von ihm

0

Versuchen zu entfernen:

QMainWindow :: setDockNestingEnabled (true);