【问题标题】:QDockWidget stretch factor for QMainWindow::splitDockWidget?QMainWindow::splitDockWidget 的 QDockWidget 拉伸因子?
【发布时间】:2017-02-23 23:39:29
【问题描述】:

我正在使用 QMainWindow 在 C++ 中手动布局 Qt 应用程序。我想要两个并排停靠在屏幕底部的小部件,但我希望它们具有不成比例的宽度。目前,我只能让它们具有相同的宽度。有没有办法设置拉伸因子或其他机制来获得不均匀的停靠拆分?

这是我目前的布局方式:

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

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

这是我想要实现的图像:

谢谢!

【问题讨论】:

    标签: c++ qt


    【解决方案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();
    }
    

    【讨论】:

    • 感谢您的回复!这是一种有趣的方法——我没有考虑过。我有点担心如果有人从这两个坞站 (_dockA / _dockB) 中的一个取消停靠并重新停靠在 QMainWindow 上的其他地方会发生什么。至少会有所有权问题。发布后,我偶然发现了QMainWindow::resizeDocks。不幸的是,这不适用于这个用例。尝试在水平方向调整我的 thumbnailViewer 的大小只是垂直调整它的大小......
    • 是的,resizeDocks 看起来更有希望。我能够让它工作。我会用我发现的内容更新我的答案,以防万一。
    • 谢谢 - 这太棒了! resizeDocks 最初对我来说效果不佳 - 你的例子让我意识到我需要在 show() 调用之后放置我的 resizeDocks 调用。猜测这是因为我涉及侧面板,并且这里存在自动调整大小的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 2013-11-11
    相关资源
    最近更新 更多