分享

c – 如何使Qt子小部件高度相等?

 印度阿三17 2019-09-02

我在一个QWidget中有一些QDockWidgets(不浮动,只能关闭).
我在每个QDockWidget中都有一些小部件 – 它们的高度应该相等.
可以通过上下文菜单隐藏这些内部小部件.

我的内部小部件应该具有相同的高度.我是这样做的:

void MyDocksPanel::redistributeSpace()
{
    QBoxLayout * lay = (QBoxLayout *)layout();
    for (int i = 0; i < lay->count(); i  )
    {
        QWidget * dock = lay->itemAt(i)->widget();
        if (dock == NULL)
            continue;

        int size = 0;
        foreach(QWidget * subWidget, dock->findChildren<QWidget*>())
            size  = subWidget->isVisible() ? 1 : 0;

        if (dock->isVisible() && (size == 0))
            dock->hide();
        lay->setStretch(i, size);
    }
}

一切正常,直到我为每个QDockWidget添加一些const元素:一些水平滚动条和一些标签……现在我的内部小部件有不同的大小.但是我必须将他们的高度设置得非常平等.

QLayout在小部件层次结构的一个级别上布局小部件大小.如何制作高度相等的子小部件?

3个子小部件与2个子部件

我设置第3和第2段的第一个策略:

但是,当我添加滚动条时:

我的5个小部件的高度等于37,37,37,28,28 ……这就是问题所在

解决方法:

你有关于拉伸因子的正确轨迹,但请考虑像素值而不是小比例.尝试将每个停靠窗口小部件的伸展因子设置为:

dockWidgetStretch = numChildWidgets * childWidgetMinimumHeight   scrollBarHeight;

其中childWidgetMinimumHeight和scrollBarHeight都以像素表示,并且都是常量.

编辑:这是一个工作的例子.您可能需要进行一些实验才能使其与您的程序一起使用,但这应该是一个好的开始.

header.h

#include <QtGui>

class WidgetWith3Children : public QWidget
{
public:
    WidgetWith3Children()
    {
        QTextEdit *edit1 = new QTextEdit;
        QTextEdit *edit2 = new QTextEdit;
        QTextEdit *edit3 = new QTextEdit;
        QScrollBar *scrollBar = new QScrollBar(Qt::Horizontal);
        QVBoxLayout *layout = new QVBoxLayout;
        layout->addWidget(edit1);
        layout->addWidget(edit2);
        layout->addWidget(edit3);
        layout->addWidget(scrollBar);
        setLayout(layout);
    }
};

class WidgetWith2Children : public QWidget
{
public:
    WidgetWith2Children()
    {
        QTextEdit *edit1 = new QTextEdit;
        QTextEdit *edit2 = new QTextEdit;
        QScrollBar *scrollBar = new QScrollBar(Qt::Horizontal);
        QVBoxLayout *layout = new QVBoxLayout;
        layout->addWidget(edit1);
        layout->addWidget(edit2);
        layout->addWidget(scrollBar);
        setLayout(layout);
    }
};

class OuterWidget : public QWidget
{
public:
    OuterWidget()
    {
        QDockWidget *dockWidget1 = new QDockWidget;
        QDockWidget *dockWidget2 = new QDockWidget;
        dockWidget1->setWidget(new WidgetWith3Children);
        dockWidget2->setWidget(new WidgetWith2Children);
        QVBoxLayout *layout = new QVBoxLayout;

        // 71 is the height of the minimum size hint for QTextEdit
        // 30 is the height of a horizontal scrollbar (on my system)
        layout->addWidget(dockWidget1, 71 * 3   30);
        layout->addWidget(dockWidget2, 71 * 2   30);

        layout->setMargin(0);
        setLayout(layout);
    }
};

main.cpp中

#include <QtGui/QApplication>
#include "header.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    OuterWidget w;
    w.show();

    return a.exec();
}
来源:https://www./content-4-434351.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多