После добавления нового DockWidget автоматически изменяйте размеры DockWidgets до тех же высот

В настоящее время я пишу небольшое приложение, которое позволяет пользователю свободно определять графики. Текущее решение использует QDockWidget, так что пользователь может изменять размеры и переставлять графики по своему усмотрению.

Я вполне доволен этим решением, но есть еще один недостаток. В случае, если пользователь добавляет новый QDockWidget к уже определенным хорошим поведением было бы изменить размер всех QDockWidgetчтобы иметь одинаковую высоту.

Следующий код иллюстрирует то, что я пытаюсь достичь.

#include <QtGui>
#include <QMainWindow>
#include <QDockWidget>
#include <QLabel>
#include <QApplication>
#include <QAction>
#include <QMenuBar>

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

    auto window = new QMainWindow;
    auto label = new QLabel("Central Widget");
    label->hide();
    window->setCentralWidget(label);
    window->setDockNestingEnabled(true);
    for (int i = 1; i < 3; i++) {
        auto dock = new QDockWidget(QString("Plot %1").arg(i));
        dock->setWidget(new QLabel(QString("Plot %1").arg(i)));
        window->addDockWidget(Qt::LeftDockWidgetArea, dock);
    }
    window->setFixedSize(QSize(300, 600));
    window->show();

    // User presses a button and the following would get executed!
    auto dock = new QDockWidget(QString("New Plot"));
    dock->setWidget(new QLabel(QString("New Plot")));
    window->addDockWidget(Qt::LeftDockWidgetArea, dock);
    return app.exec();
}

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

Поведение кода

Желаемое поведение должно быть примерно таким, после того как я вручную изменил размеры виджетов дока. Желаемое поведение

Как я могу добиться такого поведения с наименьшим количеством дополнительной работы? Действительно ли мне нужно вручную изменять размер всех моих QDockWidgets?

2 ответа

Решение

Это происходит потому, что вы не определили минимальный размер QDockWidgets, Так что если вы хотите, чтобы ваш третий док-виджет должен был быть того же размера. Установите его минимальную высоту равной 1/3 от общего размера окна следующим образом:

dock->setMinimumHeight(window->height()/3); //! This is the third dock widget

Я сделал то же самое в моей системе стыковки, используя новую функцию, поставляемую с Qt 5.6 (предназначенную именно для этого варианта использования):

void QMainWindow::resizeDocks(const QList<QDockWidget *> &docks, 
                              const QList<int> &sizes, 
                              Qt::Orientation orientation)

http://doc.qt.io/qt-5/qmainwindow.html

Другие вопросы по тегам