119void QGraphicsGridLayout::addItem(QGraphicsLayoutItem *item,
int row,
int column,
120 int rowSpan,
int columnSpan, Qt::Alignment alignment)
122 Q_D(QGraphicsGridLayout);
123 if (row < 0 || column < 0) {
124 qWarning(
"QGraphicsGridLayout::addItem: invalid row/column: %d",
125 row < 0 ? row : column);
128 if (columnSpan < 1 || rowSpan < 1) {
129 qWarning(
"QGraphicsGridLayout::addItem: invalid row span/column span: %d",
130 rowSpan < 1 ? rowSpan : columnSpan);
134 qWarning(
"QGraphicsGridLayout::addItem: cannot add null item");
138 qWarning(
"QGraphicsGridLayout::addItem: cannot insert itself");
142 d->addChildLayoutItem(item);
144 QGraphicsGridLayoutEngineItem *gridEngineItem =
new QGraphicsGridLayoutEngineItem(item, row, column, rowSpan, columnSpan, alignment);
145 d->engine.insertItem(gridEngineItem, -1);
286void QGraphicsGridLayout::setRowMinimumHeight(
int row, qreal height)
288 Q_D(QGraphicsGridLayout);
289 d->engine.setRowSizeHint(Qt::MinimumSize, row, height, Qt::Vertical);
305void QGraphicsGridLayout::setRowPreferredHeight(
int row, qreal height)
307 Q_D(QGraphicsGridLayout);
308 d->engine.setRowSizeHint(Qt::PreferredSize, row, height, Qt::Vertical);
324void QGraphicsGridLayout::setRowMaximumHeight(
int row, qreal height)
326 Q_D(QGraphicsGridLayout);
327 d->engine.setRowSizeHint(Qt::MaximumSize, row, height, Qt::Vertical);
343void QGraphicsGridLayout::setRowFixedHeight(
int row, qreal height)
345 Q_D(QGraphicsGridLayout);
346 d->engine.setRowSizeHint(Qt::MinimumSize, row, height, Qt::Vertical);
347 d->engine.setRowSizeHint(Qt::MaximumSize, row, height, Qt::Vertical);
354void QGraphicsGridLayout::setColumnMinimumWidth(
int column, qreal width)
356 Q_D(QGraphicsGridLayout);
357 d->engine.setRowSizeHint(Qt::MinimumSize, column, width, Qt::Horizontal);
373void QGraphicsGridLayout::setColumnPreferredWidth(
int column, qreal width)
375 Q_D(QGraphicsGridLayout);
376 d->engine.setRowSizeHint(Qt::PreferredSize, column, width, Qt::Horizontal);
392void QGraphicsGridLayout::setColumnMaximumWidth(
int column, qreal width)
394 Q_D(QGraphicsGridLayout);
395 d->engine.setRowSizeHint(Qt::MaximumSize, column, width, Qt::Horizontal);
411void QGraphicsGridLayout::setColumnFixedWidth(
int column, qreal width)
413 Q_D(QGraphicsGridLayout);
414 d->engine.setRowSizeHint(Qt::MinimumSize, column, width, Qt::Horizontal);
415 d->engine.setRowSizeHint(Qt::MaximumSize, column, width, Qt::Horizontal);
422void QGraphicsGridLayout::setRowAlignment(
int row, Qt::Alignment alignment)
424 Q_D(QGraphicsGridLayout);
425 d->engine.setRowAlignment(row, alignment, Qt::Vertical);
441void QGraphicsGridLayout::setColumnAlignment(
int column, Qt::Alignment alignment)
443 Q_D(QGraphicsGridLayout);
444 d->engine.setRowAlignment(column, alignment, Qt::Horizontal);
501QGraphicsLayoutItem *QGraphicsGridLayout::itemAt(
int row,
int column)
const
503 Q_D(
const QGraphicsGridLayout);
504 if (row < 0 || row >= rowCount() || column < 0 || column >= columnCount()) {
505 qWarning(
"QGraphicsGridLayout::itemAt: invalid row, column %d, %d", row, column);
508 if (QGraphicsGridLayoutEngineItem *engineItem =
static_cast<QGraphicsGridLayoutEngineItem*>(d->engine.itemAt(row, column)))
509 return engineItem->layoutItem();
526QGraphicsLayoutItem *QGraphicsGridLayout::itemAt(
int index)
const
528 Q_D(
const QGraphicsGridLayout);
529 if (index < 0 || index >= d->engine.itemCount()) {
530 qWarning(
"QGraphicsGridLayout::itemAt: invalid index %d", index);
533 if (QGraphicsGridLayoutEngineItem *engineItem =
static_cast<QGraphicsGridLayoutEngineItem*>(d->engine.itemAt(index)))
534 return engineItem->layoutItem();
544void QGraphicsGridLayout::removeAt(
int index)
546 Q_D(QGraphicsGridLayout);
547 if (index < 0 || index >= d->engine.itemCount()) {
548 qWarning(
"QGraphicsGridLayout::removeAt: invalid index %d", index);
552 if (QGraphicsGridLayoutEngineItem *gridItem =
static_cast<QGraphicsGridLayoutEngineItem*>(d->engine.itemAt(index))) {
553 if (QGraphicsLayoutItem *layoutItem = gridItem->layoutItem())
554 layoutItem->setParentLayoutItem(
nullptr);
555 d->engine.removeItem(gridItem);
558 for (
const Qt::Orientation orient : {Qt::Horizontal, Qt::Vertical}) {
559 const int oldCount = d->engine.rowCount(orient);
560 if (gridItem->lastRow(orient) == oldCount - 1) {
561 const int newCount = d->engine.effectiveLastRow(orient) + 1;
562 d->engine.removeRows(newCount, oldCount - newCount, orient);
607void QGraphicsGridLayout::setGeometry(
const QRectF &rect)
609 Q_D(QGraphicsGridLayout);
610 QGraphicsLayout::setGeometry(rect);
611 QRectF effectiveRect = geometry();
612 qreal left, top, right, bottom;
613 getContentsMargins(&left, &top, &right, &bottom);
614 Qt::LayoutDirection visualDir = d->visualDirection();
615 d->engine.setVisualDirection(visualDir);
616 if (visualDir == Qt::RightToLeft)
618 effectiveRect.adjust(+left, +top, -right, -bottom);
619 d->engine.setGeometries(effectiveRect, d->styleInfo());
620#ifdef QGRIDLAYOUTENGINE_DEBUG
621 if (qt_graphicsLayoutDebug()) {
622 static int counter = 0;
623 qDebug(
"==== BEGIN DUMP OF QGraphicsGridLayout (%d)====", counter++);
625 qDebug(
"==== END DUMP OF QGraphicsGridLayout ====");
633QSizeF QGraphicsGridLayout::sizeHint(Qt::SizeHint which,
const QSizeF &constraint)
const
635 Q_D(
const QGraphicsGridLayout);
636 qreal left, top, right, bottom;
637 getContentsMargins(&left, &top, &right, &bottom);
638 const QSizeF extraMargins(left + right, top + bottom);
639 return d->engine.sizeHint(which , constraint - extraMargins, d->styleInfo()) + extraMargins;