【问题标题】:QSplitter with one fixed size widget and one variable size widget?QSplitter 有一个固定大小的小部件和一个可变大小的小部件?
【发布时间】:2013-01-18 11:08:12
【问题描述】:

是否有可能有一个QSplitter,其中一个小部件的大小固定,另一个小部件的大小可变?

此代码设置正确,但是当调整窗口大小时,拆分器会与初始小部件大小成比例地变化:

vSplitter = new QSplitter(Qt::Vertical, this);
vSplitter->addWidget(widget1);
vSplitter->addWidget(widget2);
QList<int> heights;
heights.push_back(550);
heights.push_back(1000);
vSplitter->setSizes(heights);

setCentralWidget(vSplitter);

谢谢。

【问题讨论】:

    标签: qt qsplitter


    【解决方案1】:

    试试这个:

    QSplitter::setStretchFactor ( int index, int stretch )

    只需将要保持固定大小的部分的拉伸因子设置为 0,然后在另一个小部件上将其设置为 1。

    调整整个窗口大小时,拉伸因子为 0 的小部件不会调整大小。

    【讨论】:

    • setStretchFactor 根本不可靠
    【解决方案2】:

    我正在尝试做类似的事情。我有一个固定小部件(顶部)和一个非固定小部件(底部)。我希望用户能够正常使用拆分器句柄,但我不希望调整窗口大小来为固定小部件添加空间。在两个小部件上使用 setSizePolicy 对我来说不起作用,在一个或两个小部件上使用 setStretchFactor 也不起作用。

    我最终将 QSplitter 子类化,这样我就可以实现一个 resizeEvent,它会在拆分器调整大小后移动拆分器。此代码假定: 只有两个小部件。 顶部 [0] 可以调整大小,底部 [1] 不应该。

    这是我写的resizeEvent:

    MySplitter::resizeEvent(QResizeEvent *event) {
        /* The first resizeEvent is -1 for height and width, because it was
           invisible before. */
        if (event->oldSize().height() != -1) {
            int diff;
            QList<int> previousSizes = sizes();
            QSplitter::resizeEvent(event);
            QList<int> newSizes = sizes();
            /* The bottom widget is the fixed one, so find out if that is to
               grow or shrink. */
            diff = newSizes[1] - previousSizes[1];
            if (diff > 0) {
                /* Keep the bottom from growing by giving the size to the top. */
                newSizes[0] += diff;
                newSizes[1] -= diff;
            }
            else {
                /* Steal size from the top to keep it from shrinking. */
                newSizes[0] -= diff;
                newSizes[1] += diff;
            }
            setSizes(newSizes);
        }
        else
            QSplitter::resizeEvent(event);
    }
    

    【讨论】:

    • 有点晚了,看看this
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    相关资源
    最近更新 更多