Fixed a bug where spans across empty cells got broken.
If a row/column is only used only because of the spanning of an item, the cell should be treated as it didn't exist. We keep track of this with the "ignore" bit array. The old code would always start from the row/column at position 1. In the attached testcase this made the effectiveRowSpan become larger than actually needed. Task-number: QTBUG-30255 Change-Id: Ief0e7018ee8e5ee36272ce075a43312ffeac7b91 Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>
This commit is contained in:
parent
52ebf1f191
commit
4f072e2d3d
@ -1475,7 +1475,7 @@ void QGridLayoutEngine::fillRowData(QGridLayoutRowData *rowData, const QLayoutSt
|
||||
|
||||
int effectiveRowSpan = 1;
|
||||
for (int i = 1; i < itemRowSpan; ++i) {
|
||||
if (!rowData->ignore.testBit(i))
|
||||
if (!rowData->ignore.testBit(i + itemRow))
|
||||
++effectiveRowSpan;
|
||||
}
|
||||
|
||||
|
@ -126,6 +126,7 @@ private slots:
|
||||
void spanningItem2x3_data();
|
||||
void spanningItem2x3();
|
||||
void spanningItem();
|
||||
void spanAcrossEmptyRow();
|
||||
void heightForWidth();
|
||||
void widthForHeight();
|
||||
void heightForWidthWithSpanning();
|
||||
@ -3352,6 +3353,33 @@ void tst_QGraphicsGridLayout::spanningItem()
|
||||
QCOMPARE(layout->maximumSize(), QSizeF(160,80));
|
||||
}
|
||||
|
||||
void tst_QGraphicsGridLayout::spanAcrossEmptyRow()
|
||||
{
|
||||
QGraphicsWidget *form = new QGraphicsWidget(0, Qt::Window);
|
||||
QGraphicsGridLayout *layout = new QGraphicsGridLayout(form);
|
||||
layout->setContentsMargins(0, 0, 0, 0);
|
||||
layout->setSpacing(0);
|
||||
RectWidget *w1 = new RectWidget;
|
||||
RectWidget *w2 = new RectWidget;
|
||||
RectWidget *w3 = new RectWidget;
|
||||
|
||||
QSizeF size(10, 10);
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
w1->setSizeHint((Qt::SizeHint)i, size);
|
||||
w2->setSizeHint((Qt::SizeHint)i, size);
|
||||
w3->setSizeHint((Qt::SizeHint)i, size);
|
||||
size+=size; //[(10,10), (20,20), (40,40)]
|
||||
}
|
||||
layout->addItem(w1, 0, 0, 1, 1);
|
||||
layout->addItem(w2, 0, 1, 1, 2);
|
||||
layout->addItem(w3, 0, 99, 1, 1);
|
||||
|
||||
form->resize(60,20);
|
||||
QCOMPARE(w1->geometry(), QRectF( 0, 0, 20, 20));
|
||||
QCOMPARE(w2->geometry(), QRectF(20, 0, 20, 20));
|
||||
QCOMPARE(w3->geometry(), QRectF(40, 0, 20, 20));
|
||||
}
|
||||
|
||||
void tst_QGraphicsGridLayout::stretchAndHeightForWidth()
|
||||
{
|
||||
QGraphicsWidget *widget = new QGraphicsWidget(0, Qt::Window);
|
||||
|
Loading…
Reference in New Issue
Block a user