我遇到了一个真正的挑战,让QScrollArea地占用最小空间。

我的GUI模型如下: QScrollArea包含一个垂直布局,其中填充了TableRow类的小部件。 我希望这个类TableRow占用最小高度。 它在顶部有一个小部件,它总是可见的,下面有一个QScrollArea ,里面有一个标签,可以切换它的可见性。 标签用于注释,可以是0个字符或长度可以是无限的(除了硬件限制)。

我发现对于TableRow类中的标签设置,将verticalPolicy sizePolicyFixed将实际占用所需内容的精确程度(请参阅: Qt Layout,在窗口小部件大小更改后调整为最小值 )。 但是,这似乎不适用于QScrollArea 事实上,我尝试过的每个sizePolicy都将QScrollArea保持在一个固定的高度; 除了Ignore ,但QScrollArea的高度为0,无论其内容如何。

我创建了一个git分支,生成了这个问题的简化版本。

以下是应用固定垂直sizePolicy的结果: 固定垂直sizePolicy的结果

我对此测试用例的期望是:

  • 第一QScrollArea部件的高度应该几乎是30px(上部小部件的高度),仅显示QLabelQScrollArea
  • 第二小的高度应大于130px(的最大高度较短QScrollArea为100像素),但大到足以显示标签不滚动
  • 第三个小部件的高度应为130px,并且应该出现滚动条(除非将vertical sizePolicy设置为Ignored否则此部分在我尝试过的每种情况下都是正确的)

我理解我可能需要覆盖一些事情来使这项工作,因为它本身并不明显为什么QScrollArea的高度可能依赖于它的子窗口小部件(这可能是为什么它不是为了使这容易,或至少看起来为什么喜欢它不是)。

但是,我认为我试图制作的案例很常见,而且我目前的做法是合理的。 如果有另一种/更好的方法可以使单个小部件在达到最大高度后滚动,那么我可以将其作为答案,只要它符合我期望的三个条件。

===============>>#1 票数:0 已采纳

这感觉更像是黑客而不是解决方案,但它确实对我有用,至少在短期内如此。 因为lblNotes的文本不会改变运行时,所以我能够在TableRow小部件的构造函数中添加以下代码:

// Hack to resize QScrollAreas
ui->lblNotes->adjustSize(); // Otherwise lblNotes will think its height is still ~0px
int height = ui->lblNotes->height() + 12; // Borders and margins add up to 12px
if (height > 100) { height = 100; } // Cap the height at desired maximum value
ui->scrollArea->setFixedHeight(height);

我是否应该处理动态设置文本的情况,我可以将其包装在一个函数中,以便在设置lblNotes的文本时随时调用。

我仍然愿意接受使用Qt本身的布局功能的解决方案,因为我认为如果存在解决方案,那将是首选。 某些QScrollArea内容可能不会直接确定将来的高度。

  ask by Assimilater translate from so

未解决问题?本站智能推荐:

1回复

具有动态变化内容的QScrollArea

我有一个QScrollArea,里面有一些按钮,如图所示。 布局的想法是:1。当按钮太宽时,应使用左右按钮滚动按钮 2.滚动区域中的按钮数量可以动态更改3.应尽可能使用任何可用空间来扩展滚动区域。 如果不存在这样的空间,则应使用导航按钮进行滚动。 随着我当前的实现,当我增加按
1回复

带有QHBoxLayout的QScrollArea奇怪的大小调整行为

如何重现:创建一个新的Qt Widgets Application并将其mainwindow.cpp替换为以下内容: 生成项目后,生成的应用程序窗口将被拒绝垂直收缩到以下位置: 我的问题:如何摆脱按钮上方和下方的空白? 我尝试操纵大小提示,大小策略以及所有其他与远程相关的内
1回复

如何使QTextBrowser具有最大尺寸?

我有QScrollArea,它具有QVBoxLayout,我在其中放置小部件,其中之一是QTextBrowser,我想使QTextBrowser具有其内容的大小并删除其滚动条。 我继承了QTextBrowser,更改了sizePolicy,隐藏了滚动条并覆盖了sizeHint(),如下所示:
1回复

QScrollArea带有动态添加的小部件

我在QScrollArea中放置自定义小部件时遇到一些问题。 我的自定义小部件在QGridLayout中包含4个标签填充它。 现在我想将这个小部件保存在QScrollArea中,并且能够为它添加更多标签,但我想只在视口中显示其中的4个。 这就是QScrollArea中带有4个标签的wi
1回复

如何将comboBox移至其垂直布局的底部?

在我的程序中,当按下按钮时,我需要verticalLayout顶部的comboBox向下移动到底部,因此第二个comboBox位于顶部。 comboBoxes已在Qt设计器中创建,我需要能够在一个应用程序实例中多次完成。 我该怎么做呢?
1回复

Layoust问题:当表单的布局设置为“垂直”时,groupbox中的Qlistbox会自动展开

我在QgroupBox内部有一个Qlistbox,其布局设置为“表单布局中的布局”,现在QgroupBox在其布局设置为垂直的窗体内。 实际上,每当我将窗体的布局设置为垂直时,QlistBox就会展开。 我已将列表框的大小策略设置为固定,但仍会扩展。 有什么建议么 ?
1回复

使小部件在Qt布局中部分重叠

我试图让部件在Qt布局中部分重叠。 我的当前布局如下,使用包含四个QHBoxLayout子节点的QVBoxLayout实现: 我正在尝试重新组合相同花色的卡片,以达到类似的效果(注意水平和垂直重叠): 不幸的是,我读过的所有Qt文档和所有Stack Overflow帖子都试图避
1回复

根据内容动态调整qwidget和qlayout的大小

我正在研究QT中的第一个项目,并且有一个关于动态调整小部件和布局大小的问题。 我正在开发一个qwidget,它将根据给qwidget的构造函数的参数保存许多小部件。 我无法调整窗口小部件以及布局和组框的大小以适应构造函数传递的窗口小部件的数量。 我的qwidget目前包含一个组框和
1回复

QVideoWidget对齐后不显示任何内容

我遇到了一个奇怪的问题,需要一些帮助。 情况很简单:我有一个QMediaPlayer , QVideoWidget和一些布局(例如QVboxLayout ;实际上,这并不重要)。 问题是当我添加具有指定对齐方式的QVideoWidget时-视频未显示,该窗口小部件只有一个位置,没有视频的空白
1回复

行为不明确maximumSize和sizePolicy

我有3个按钮的简单窗口。 窗口的属性大小策略为固定,固定。 几何尺寸为266,115。最小尺寸为266,115。最大尺寸为16777215,16777215。 我以这种方式认为:“如果sizePolicy是固定的,那么我将无法拉伸任何大小的窗口。它必须类似于几何形状。如果sizePol