qt - QSplitter 有一个固定大小的小部件和一个可变大小的小部件?

标签 qt qsplitter

是否有可能拥有 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);

谢谢你。

最佳答案

我正在尝试做类似的事情。我有一个固定小部件(顶部)和一个非固定小部件(底部)。我希望用户能够正常使用拆分器句柄,但我不希望调整窗口大小来为固定小部件添加空间。在两个小部件上使用 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);
}

关于qt - QSplitter 有一个固定大小的小部件和一个可变大小的小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14397653/

相关文章:

c++ - QVariant.toXXX 函数的函数指针

c++ - QSplitter:如何使第二列更小?

c++ - 如何向 moc_predefs.h 添加定义?

c++ - 这安全吗? (qt QQueue.dequeue() c++ 内联指针取消引用)

qt - pyqt qt4如何向QSplitter添加一个微小的箭头/折叠按钮

c++ - 无法在 QSplitter (Qt) 中交换小部件

python - 使用 PyQt 实现分割器(QtCreator 生成的文件)

python - 通过从 PyQt4 中使用 QSplitter() 设置的按钮调用来删除小部件

c++ - 试图从另一个类访问 MainWindow 的小部件

c++ - 如何映射项目坐标?