После добавления нового 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)