gpt4 book ai didi

c++ - 如何使 Qt 子部件高度相等?

转载 作者:太空狗 更新时间:2023-10-29 20:45:39 25 4
gpt4 key购买 nike

我在单个 QWidget 中有一些 QDockWidget(不是 float 的,只能关闭)。我在每个 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 个子部件 vs 2 个子部件

First picture

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

enter image description here

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

enter image description here

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

最佳答案

您在拉伸(stretch)因子方面走在了正确的轨道上,但考虑的是像素值而不是小比例。尝试将每个停靠小部件的拉伸(stretch)因子设置为:

dockWidgetStretch = numChildWidgets * childWidgetMinimumHeight + scrollBarHeight;

其中childWidgetMinimumHeightscrollBarHeight都是用像素表示的,都是常量。

编辑:这是一个工作示例。您可能需要进行一些试验才能让它与您的程序一起工作,但这应该是一个好的开始。

标题.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);
}
};

主要.cpp

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

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

return a.exec();
}

关于c++ - 如何使 Qt 子部件高度相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10244717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com