我正在基于QGraphicsWidget
在小部件内,我需要与窗口大小一致的其他各种小部件。为此,我正在使用
Layout = new QGraphicsLinearLayout();
Layout->setOrientation(Qt::Horizontal);
setLayout(Layout);
所以我有一个布局,并且在布局的每一侧都有一个小部件。因此,左侧是小部件,右侧是小部件。
QGraphicsLinearLayout() below
500 px wide x
|--------------------------------|
| |
|left widget right widget| 100 px tall y
|--------------------------------|
我想要的行为是,当窗口变大时,小部件将停留在边缘的x像素之内。因此,如果将窗口调整为10,000像素宽,则左窗口小部件将始终距离左边缘1像素,而右窗口小部件将始终距离右边缘1像素。
10000 px wide x
|---------------------------------------------------|
| |
|left widget right widget| 100 px tall y
|---------------------------------------------------|
当前行为是,左窗口小部件将留在原处且永不移动,而右窗口小部件将从右边缘移开。
为实现此行为,我尝试了以下操作:
Layout->setAlignment(leftWidget, Qt::AlignLeft);
那绝对不起作用。
我也尝试过
Layout->addItem(leftWidget);
Layout->setStretchFactor(leftWidget, 0);
Layout->addItem(rightWidget);
可以达到预期效果,但是将rightWidget与边框重叠
500 px wide x
|--------------------------------|
| |
|left widget right widget 100 px tall y
|--------------------------------|
那我怎样才能得到我想要的行为?到目前为止,QLayouts似乎非常令人困惑,并且该API具有误导性。
答案 0 :(得分:0)
在左侧和右侧小部件之间使用QGraphicsLinearLayout::addStretch以便将它们保持在侧面,并在QGraphicsLayout::setContentsMargins上添加小部件和边缘之间的空间:
lis1= ('orange','strawberry','strawberry','strawberry','orange','orange','orange','strawberry')
lis2= ("lorem ipsum review","lorem ipsum review", "lorem ipsum review","lorem ipsum review","lorem ipsum review","lorem ipsum review","lorem ipsum review","lorem ipsum review")
pd.DataFrame({'category':lis1, 'review': lis2})
category review
0 orange lorem ipsum review
1 strawberry lorem ipsum review
2 strawberry lorem ipsum review
3 strawberry lorem ipsum review
4 orange lorem ipsum review
5 orange lorem ipsum review
6 orange lorem ipsum review
7 strawberry lorem ipsum review
我为您准备了一个使用示例解决方案的最小示例:
auto *l = new QGraphicsLinearLayout();
l->addItem(leftProxy);
l->addStretch();
l->addItem(rightProxy);
l->setContentsMargins(25, 1, 1, 1);
l->setSpacing(1);