QMainWindow::splitDockWidget的QDockWidget拉伸因子? 我用QMIN窗口在C++中手工编写QT应用程序。我希望在屏幕底部有两个并排停靠的小部件,但我希望它们的宽度不成比例。目前,我只能让它们具有相同的宽度。有没有办法设置拉伸系数或其他机制来获得不均匀的对接分离

QMainWindow::splitDockWidget的QDockWidget拉伸因子? 我用QMIN窗口在C++中手工编写QT应用程序。我希望在屏幕底部有两个并排停靠的小部件,但我希望它们的宽度不成比例。目前,我只能让它们具有相同的宽度。有没有办法设置拉伸系数或其他机制来获得不均匀的对接分离,c++,qt,C++,Qt,以下是我目前的布局方式: OutputPanel* outputPanel = new OutputPanel; mainWindow.addDockWidget(Qt::BottomDockWidgetArea, outputPanel); ThumbnailViewer* thumbnailViewer = new ThumbnailViewer; mainWindow.splitDockWidget(outputPanel, thumbnailViewer, Qt::Horizontal

以下是我目前的布局方式:

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

ThumbnailViewer* thumbnailViewer = new ThumbnailViewer;
mainWindow.splitDockWidget(outputPanel, thumbnailViewer, Qt::Horizontal);
以下是我想要实现的目标:


谢谢

按照您的建议,使用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();
}

按照您的建议,使用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();
}

谢谢你的回复!这是一个有趣的方法——我没有考虑过。我有点担心如果有人拆下这两个码头中的一个,然后在qmain窗口上的其他地方重装,会发生什么。至少会有所有权问题。发帖后,我无意中发现了。不幸的是,这不适用于这个用例。尝试在水平方向上调整thumbnailViewer的大小只是在垂直方向上调整它的大小…是的,调整大小的Dock看起来更有希望。我能让它工作。我会用我发现的更新我的答案,以防有用。谢谢-这太棒了!resizeDocks最初并不适合我——你的例子让我意识到我需要将resizeDocks呼叫放在节目呼叫之后。我猜这是因为我涉及侧面板,这里有自动调整尺寸的问题。谢谢你的回复!这是一个有趣的方法——我没有考虑过。我有点担心如果有人拆下这两个码头中的一个,然后在qmain窗口上的其他地方重装,会发生什么。至少会有所有权问题。发帖后,我无意中发现了。不幸的是,这不适用于这个用例。尝试在水平方向上调整thumbnailViewer的大小只是在垂直方向上调整它的大小…是的,调整大小的Dock看起来更有希望。我能让它工作。我会用我发现的更新我的答案,以防有用。谢谢-这太棒了!resizeDocks最初并不适合我——你的例子让我意识到我需要将resizeDocks呼叫放在节目呼叫之后。我猜这是因为我有侧板,这里有自动调整尺寸的问题。