Коэффициент растяжения QDockWidget для QMainWindow::splitDockWidget?

Я вручную выкладываю приложение Qt в C++, используя QMainWindow. Я хочу, чтобы два прикрепленных виджета внизу экрана располагались параллельно, но я хочу, чтобы они имели непропорциональную ширину. В настоящее время я могу получить только одинаковую ширину. Есть ли способ установить коэффициент растяжения или другой механизм, чтобы получить неравномерное разделение дока?

Вот как я их выкладываю сейчас:

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

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

Вот изображение того, чего я хотел бы достичь: введите описание изображения здесь

Спасибо!

1 ответ

Решение

Использование QMainWindow::resizeDocks, как вы предложили. После установки параметров resizeDock относительные пропорции сохраняются по мере изменения размеров главного окна.

#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();
}
Другие вопросы по тегам