2012-04-14 242 views
1

我有一个QGridLayout,它有六行中的一些小部件。行1,3和5包含打开文件选择对话框的QLabelQLineEditQPushButton。行2,4和6包含用于向用户呈现验证错误的QLabel。错误隐藏在下面的图片中。如何防止QGridLayout中的小部件重叠?

当窗口能够占用尽可能多的空间时,它不会出现此问题。但是,当我限制窗口的大小可言,在此列表中的元素,看起来就像这样:

QGridLayout with vertically restricted elements

所以我的问题是,我该如何确保在QGridLayout所有qwidgets可以尽可能多的占用他们需要什么空间?

编辑: 继@Avaris'的建议,我打过电话setMinimumSize()QGridLayout(共6行)每个插件,以及可见的元素看起来好多了(感谢,@Avaris!)。但是现在,当我导致验证错误时,错误本身(红色QLabel)放置在其他小部件上。我可以强制QGridLayout不重叠吗?

下面是它看起来像现在: enter image description here

+1

您是否将这些小部件的最小尺寸设置为小? – Avaris 2012-04-14 17:22:33

+0

@Avaris,我尝试了你的建议,它适用于可见的元素。然而,其他行(包含隐藏的'QLabel')现在显示在其他元素的顶部。我可以强迫他们都排队吗?谢谢! – James 2012-04-14 19:17:12

+0

我并不是建议你设置最小尺寸:)。我问你以前是否设置过任何东西。如果你没有为你的小部件设置任何大小,他们不应该那么小。你可以发布一些代码吗? – Avaris 2012-04-14 20:57:30

回答

0

虽然解决摸索,我发现something in the TrollTech archives一个支持@阿瓦里斯的有关设置部件的最小尺寸的想法。该帖子建议为QGridLayout中的每个小部件设置最小大小。

我的实现看起来是这样的,因为我遍历所有的元素被添加到我的QGridLayout:

widget = QtGui.QWidget() 
hint = widget.sizeHint() 
if hint.isValid(): 
    widget.setMinimumSize(hint) 

暗示的有效性所使用的布局有所不同,但部件sizehints似乎总是有效的,当我使用QGridLayout。

+0

嗯。链接已经死了,你碰巧记得它是关于什么的? – vines 2016-04-07 15:21:36

+0

啊,很抱歉,我不记得细节!由于大多数TrollTech档案的代码样本均采用C++,因此我怀疑它与上面提供的Python代码示例非常相似。 – James 2016-04-22 22:57:18