118void QGraphicsGridLayout::addItem(QGraphicsLayoutItem *item,
int row,
int column,
119 int rowSpan,
int columnSpan, Qt::Alignment alignment)
121 Q_D(QGraphicsGridLayout);
122 if (row < 0 || column < 0) {
123 qWarning(
"QGraphicsGridLayout::addItem: invalid row/column: %d",
124 row < 0 ? row : column);
127 if (columnSpan < 1 || rowSpan < 1) {
128 qWarning(
"QGraphicsGridLayout::addItem: invalid row span/column span: %d",
129 rowSpan < 1 ? rowSpan : columnSpan);
133 qWarning(
"QGraphicsGridLayout::addItem: cannot add null item");
137 qWarning(
"QGraphicsGridLayout::addItem: cannot insert itself");
141 d->addChildLayoutItem(item);
143 QGraphicsGridLayoutEngineItem *gridEngineItem =
new QGraphicsGridLayoutEngineItem(item, row, column, rowSpan, columnSpan, alignment);
144 d->engine.insertItem(gridEngineItem, -1);
285void QGraphicsGridLayout::setRowMinimumHeight(
int row, qreal height)
287 Q_D(QGraphicsGridLayout);
288 d->engine.setRowSizeHint(Qt::MinimumSize, row, height, Qt::Vertical);
304void QGraphicsGridLayout::setRowPreferredHeight(
int row, qreal height)
306 Q_D(QGraphicsGridLayout);
307 d->engine.setRowSizeHint(Qt::PreferredSize, row, height, Qt::Vertical);
323void QGraphicsGridLayout::setRowMaximumHeight(
int row, qreal height)
325 Q_D(QGraphicsGridLayout);
326 d->engine.setRowSizeHint(Qt::MaximumSize, row, height, Qt::Vertical);
342void QGraphicsGridLayout::setRowFixedHeight(
int row, qreal height)
344 Q_D(QGraphicsGridLayout);
345 d->engine.setRowSizeHint(Qt::MinimumSize, row, height, Qt::Vertical);
346 d->engine.setRowSizeHint(Qt::MaximumSize, row, height, Qt::Vertical);
353void QGraphicsGridLayout::setColumnMinimumWidth(
int column, qreal width)
355 Q_D(QGraphicsGridLayout);
356 d->engine.setRowSizeHint(Qt::MinimumSize, column, width, Qt::Horizontal);
372void QGraphicsGridLayout::setColumnPreferredWidth(
int column, qreal width)
374 Q_D(QGraphicsGridLayout);
375 d->engine.setRowSizeHint(Qt::PreferredSize, column, width, Qt::Horizontal);
391void QGraphicsGridLayout::setColumnMaximumWidth(
int column, qreal width)
393 Q_D(QGraphicsGridLayout);
394 d->engine.setRowSizeHint(Qt::MaximumSize, column, width, Qt::Horizontal);
410void QGraphicsGridLayout::setColumnFixedWidth(
int column, qreal width)
412 Q_D(QGraphicsGridLayout);
413 d->engine.setRowSizeHint(Qt::MinimumSize, column, width, Qt::Horizontal);
414 d->engine.setRowSizeHint(Qt::MaximumSize, column, width, Qt::Horizontal);
421void QGraphicsGridLayout::setRowAlignment(
int row, Qt::Alignment alignment)
423 Q_D(QGraphicsGridLayout);
424 d->engine.setRowAlignment(row, alignment, Qt::Vertical);
440void QGraphicsGridLayout::setColumnAlignment(
int column, Qt::Alignment alignment)
442 Q_D(QGraphicsGridLayout);
443 d->engine.setRowAlignment(column, alignment, Qt::Horizontal);
500QGraphicsLayoutItem *QGraphicsGridLayout::itemAt(
int row,
int column)
const
502 Q_D(
const QGraphicsGridLayout);
503 if (row < 0 || row >= rowCount() || column < 0 || column >= columnCount()) {
504 qWarning(
"QGraphicsGridLayout::itemAt: invalid row, column %d, %d", row, column);
507 if (QGraphicsGridLayoutEngineItem *engineItem =
static_cast<QGraphicsGridLayoutEngineItem*>(d->engine.itemAt(row, column)))
508 return engineItem->layoutItem();
525QGraphicsLayoutItem *QGraphicsGridLayout::itemAt(
int index)
const
527 Q_D(
const QGraphicsGridLayout);
528 if (index < 0 || index >= d->engine.itemCount()) {
529 qWarning(
"QGraphicsGridLayout::itemAt: invalid index %d", index);
532 if (QGraphicsGridLayoutEngineItem *engineItem =
static_cast<QGraphicsGridLayoutEngineItem*>(d->engine.itemAt(index)))
533 return engineItem->layoutItem();
543void QGraphicsGridLayout::removeAt(
int index)
545 Q_D(QGraphicsGridLayout);
546 if (index < 0 || index >= d->engine.itemCount()) {
547 qWarning(
"QGraphicsGridLayout::removeAt: invalid index %d", index);
551 if (QGraphicsGridLayoutEngineItem *gridItem =
static_cast<QGraphicsGridLayoutEngineItem*>(d->engine.itemAt(index))) {
552 if (QGraphicsLayoutItem *layoutItem = gridItem->layoutItem())
553 layoutItem->setParentLayoutItem(
nullptr);
554 d->engine.removeItem(gridItem);
557 for (
const Qt::Orientation orient : {Qt::Horizontal, Qt::Vertical}) {
558 const int oldCount = d->engine.rowCount(orient);
559 if (gridItem->lastRow(orient) == oldCount - 1) {
560 const int newCount = d->engine.effectiveLastRow(orient) + 1;
561 d->engine.removeRows(newCount, oldCount - newCount, orient);
606void QGraphicsGridLayout::setGeometry(
const QRectF &rect)
608 Q_D(QGraphicsGridLayout);
609 QGraphicsLayout::setGeometry(rect);
610 QRectF effectiveRect = geometry();
611 qreal left, top, right, bottom;
612 getContentsMargins(&left, &top, &right, &bottom);
613 Qt::LayoutDirection visualDir = d->visualDirection();
614 d->engine.setVisualDirection(visualDir);
615 if (visualDir == Qt::RightToLeft)
617 effectiveRect.adjust(+left, +top, -right, -bottom);
618 d->engine.setGeometries(effectiveRect, d->styleInfo());
619#ifdef QGRIDLAYOUTENGINE_DEBUG
620 if (qt_graphicsLayoutDebug()) {
621 static int counter = 0;
622 qDebug(
"==== BEGIN DUMP OF QGraphicsGridLayout (%d)====", counter++);
624 qDebug(
"==== END DUMP OF QGraphicsGridLayout ====");
632QSizeF QGraphicsGridLayout::sizeHint(Qt::SizeHint which,
const QSizeF &constraint)
const
634 Q_D(
const QGraphicsGridLayout);
635 qreal left, top, right, bottom;
636 getContentsMargins(&left, &top, &right, &bottom);
637 const QSizeF extraMargins(left + right, top + bottom);
638 return d->engine.sizeHint(which , constraint - extraMargins, d->styleInfo()) + extraMargins;