QScrollArea弄乱了QGridLayout:隐藏了QGridLayout而没有滚动

时间:2017-11-03 21:02:01

标签: c++ qt

我已经尝试了很多东西,因为已经创建了很多主题来回答这个问题。但是,到目前为止,我找到的任何提示都没有解决我正在处理的问题..

非常简单:我正在努力使QGridLayout可滚动。它可能包含几个个人小部件,小部件的数量不固定。当x小部件多于x时,QGridLayout必须是可滚动的,x是任意数字。

问题是:当我使用QScrollArea时,QScrollArea似乎隐藏了整个布局(仅显示滚动区域的背景颜色)。当我单独使用QGridLayout时,我的视图当然不可滚动,但一切都按预期工作。

我可能错过了一些东西,我的假设是:

  • 我必须以某种方式修改可滚动区域的大小,但我不确定它是否必要或者我是否已经无意识地完成了它
  • 现有QScrollArea的父窗口小部件或子窗口小部件通过异常实现来阻止QScrollArea正常运行。

这是主要代码的有趣部分:

QScrollArea *scrollArea = new QScrollArea;
QWidget *resultsPage = new QWidget;
booksGrid = new QGridLayout;
booksGrid->setSizeConstraint(QLayout::SetMinAndMaxSize);
resultsPage->setLayout(booksGrid);
scrollArea->setBackgroundRole(QPalette::Dark);
scrollArea->setWidget(resultsPage);
mainWidget->addWidget(scrollArea);

booksGrid被声明为类属性 mainWidget是一个QStackedWidget

让我知道您需要更多信息! ;)

谢谢你们!

2 个答案:

答案 0 :(得分:0)

由于我在代码片段中看不到任何可疑内容,因此我制作了MCVE来重现您的问题:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0,50,35)
y = np.random.exponential(1, len(x))
y2 = np.random.exponential(1, len(x))

plt.fill_between(x,y, step="pre", alpha=0.4)
plt.fill_between(x,y2, step="pre", alpha=0.4)

plt.plot(x,y, drawstyle="steps")
plt.plot(x,y2, drawstyle="steps")

plt.show()

在Windows 10(64位)的VS2013,Qt 5.9.2中编译和测试:

a)Snapshot of testQScrollArea-Widget (after start) b)Snapshot of testQScrollArea-Widget (after resize) c)Snapshot of testQScrollArea-Widget (after scroll)

快照是在开始(a),调整大小后(b)和滚动(c)之后拍摄的。

对我而言,一切看起来都像预期的那样。

您也可以编辑和测试样品。如果它显示与您的应用程序相同的破坏行为,那么您的Qt版本中出现了问题(否则您的应用程序中存在某些内容)。

答案 1 :(得分:0)

经过一天的斗争,我发现问题很简单:resultsPage是一个个人化的小部件,其中包含了我的风格的其他几个小部件,其中未指定大小排列在QGridLayout < / p>

为了说明这一点: QMainWidget - &gt; QScrollArea - &gt;个人化QWidget resultsPage - &gt; QGridLayout - &gt;具有未指定大小的个人化QWidget s 结果

所以,我唯一需要做的就是在QWidget结果的构造函数中使用此方法设置固定大小: setFixedSize(int w,int h);