2017-02-23 7 views
0

Ich erstelle manuell eine Qt-Anwendung in C++ mit QMainWindow. Ich möchte zwei nebeneinander angedockte Widgets am unteren Bildschirmrand, aber ich möchte, dass sie überproportional breit sind. Momentan kann ich nur erreichen, dass sie dieselbe Breite haben. Gibt es eine Möglichkeit, einen Stretch-Faktor oder einen anderen Mechanismus einzustellen, um ungleichmäßige Dock-Splits zu erhalten?QDockWidget Dehnungsfaktor für QMainWindow :: splitDockWidget?

Hier ist, wie ich sie bin zur Zeit auf:

OutputPanel* outputPanel = new OutputPanel; 
mainWindow.addDockWidget(Qt::BottomDockWidgetArea, outputPanel); 

ThumbnailViewer* thumbnailViewer = new ThumbnailViewer; 
mainWindow.splitDockWidget(outputPanel, thumbnailViewer, Qt::Horizontal); 

Hier ist ein Bild von dem, was ich erreichen möchte: enter image description here

Dank!

Antwort

3

Verwenden von QMainWindow :: resizeDocks, wie Sie vorgeschlagen haben. Nach dem Einstellen der resizeDock-Parameter bleiben die relativen Proportionen erhalten, wenn das Hauptfenster seine Größe ändert.

#include "mainwindow.h" 

#include <QApplication> 
#include <QLabel> 
#include <QDockWidget> 
#include <QList> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    MainWindow w; 
    w.setCentralWidget(new QLabel("MAIN WINDOW CONTENTS")); 

    QDockWidget* dwa = new QDockWidget("DOCK A"); 
    dwa->setWidget(new QLabel("DOCK A CONTENTS")); 

    QDockWidget* dwb = new QDockWidget("DOCK B"); 
    dwb->setWidget(new QLabel("DOCK B CONTENTS")); 

    w.addDockWidget(Qt::BottomDockWidgetArea, dwa); 
    w.addDockWidget(Qt::BottomDockWidgetArea, dwb); 

    w.splitDockWidget(dwa, dwb, Qt::Horizontal); 

    w.show(); 

    QList<QDockWidget*> docks = { dwa, dwb }; 

    float windowWidth = w.size().width(); 
    int dockWidthA = 0.60 * windowWidth; 
    int dockWidthB = 0.40 * windowWidth; 

    QList<int> dockSizes = { dockWidthA, dockWidthB }; 

    w.resizeDocks(docks, dockSizes, Qt::Horizontal); 

    return a.exec(); 
} 
+0

Danke für die Antwort! Das ist ein interessanter Ansatz - ich hatte das nicht berücksichtigt. Ich bin ein bisschen besorgt darüber, was passieren würde, wenn jemand einen dieser beiden Docks (_dockA/_dockB) abdockt und an anderer Stelle auf dem QMainWindow wieder schließt. Zumindest würde es Eigentumsprobleme geben. Nach dem Posten stolperte ich über [QMainWindow :: resizeDocks] (http://doc.qt.io/qt-5/qmainwindow.html#resizeDocks). Leider funktioniert das nicht für diesen Anwendungsfall. Wenn ich versuche, meinen ThumbnailViewer in horizontaler Richtung zu skalieren, verkleinere ich ihn nur vertikal ... –

+0

Yea resizeDocks sieht vielversprechender aus. Ich konnte das schaffen. Ich werde meine Antwort mit dem, was ich gefunden habe, aktualisieren, falls es nützlich ist. – vincent

+0

Danke - das ist großartig! ResizeDocks funktionierte ursprünglich nicht gut für mich - Ihr Beispiel machte mir klar, dass ich meine resizeDocks Anrufe nach dem Aufruf von show() setzen musste. Das zu raten ist, weil ich Side Panels involviert habe, und hier gibt es Probleme bei der Größenanpassung. –

Verwandte Themen