void tst_QGraphicsLayout::moveAndResizeWidgetInWidget() { QFETCH(bool, instantInvalidatePropagation); QGraphicsLayout::setInstantInvalidatePropagation(instantInvalidatePropagation); QGraphicsScene scene; QGraphicsWidget *widget = new QGraphicsWidget; QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(widget); layout->setContentsMargins(0,0,0,0); WidgetToTestResizeEvents *innerWidget = new WidgetToTestResizeEvents; QGraphicsLinearLayout *innerLayout = new QGraphicsLinearLayout(innerWidget); innerLayout->setContentsMargins(0,0,0,0); QCOMPARE(widget->maximumSize(), QSizeF(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)); layout->addItem(innerWidget); widget->setMinimumSize(1,1); widget->setPreferredSize(1000,1000); widget->setMaximumSize(2000,2000); widget->resize(widget->preferredSize()); innerWidget->setMinimumSize(1,1); qApp->processEvents(); innerWidget->resizeEventCalled = false; QCOMPARE(widget->size(), QSizeF(1000, 1000)); QCOMPARE(layout->geometry().size(), QSizeF(1000, 1000)); QCOMPARE(innerWidget->size(), QSizeF(1000, 1000)); innerLayout->invalidate(); widget->setMaximumHeight(500); widget->setX(1); qApp->processEvents(); QCOMPARE(widget->size(), QSizeF(1000, 500)); QCOMPARE(innerWidget->size(), QSizeF(1000, 500)); QVERIFY(innerWidget->resizeEventCalled); }
void tst_QGraphicsLayout::invalidateAndMove() { // Check that if we set the position of an item and invalidate its layout at the same // time, the widget keeps its correct size QFETCH(bool, instantInvalidatePropagation); QGraphicsLayout::setInstantInvalidatePropagation(instantInvalidatePropagation); QGraphicsScene scene; QGraphicsWidget *widget = new QGraphicsWidget; new QGraphicsLinearLayout(widget); widget->setMinimumSize(1,1); widget->setPreferredSize(34,34); widget->setMaximumSize(100,100); widget->resize(widget->preferredSize()); scene.addItem(widget); qApp->processEvents(); /* Invalidate and reactivate. The size should not have changed */ widget->layout()->invalidate(); widget->layout()->activate(); QCOMPARE(widget->geometry().size(), widget->preferredSize()); QCOMPARE(widget->layout()->geometry().size(), widget->preferredSize()); qApp->processEvents(); QCOMPARE(widget->geometry().size(), widget->preferredSize()); QCOMPARE(widget->layout()->geometry().size(), widget->preferredSize()); widget->layout()->invalidate(); widget->setX(1); //Change just the position using setX QCOMPARE(widget->geometry().size(), widget->preferredSize()); QCOMPARE(widget->layout()->geometry().size(), widget->preferredSize()); qApp->processEvents(); QCOMPARE(widget->geometry().size(), widget->preferredSize()); QCOMPARE(widget->layout()->geometry().size(), widget->preferredSize()); widget->layout()->invalidate(); widget->setGeometry(1,1,34,34); //Change just the position using setGeometry QCOMPARE(widget->geometry().size(), widget->preferredSize()); QCOMPARE(widget->layout()->geometry().size(), widget->preferredSize()); qApp->processEvents(); QCOMPARE(widget->geometry().size(), widget->preferredSize()); QCOMPARE(widget->layout()->geometry().size(), widget->preferredSize()); widget->layout()->invalidate(); widget->setGeometry(1,1,60,60); //Change just the size using setGeometry QCOMPARE(widget->geometry().size(), QSizeF(60,60)); QCOMPARE(widget->layout()->geometry().size(), QSizeF(60,60)); qApp->processEvents(); QCOMPARE(widget->geometry().size(), QSizeF(60,60)); QCOMPARE(widget->layout()->geometry().size(), QSizeF(60,60)); widget->layout()->invalidate(); widget->setGeometry(0,0,34,34); //Change the size and position using setGeometry QCOMPARE(widget->geometry().size(), widget->preferredSize()); QCOMPARE(widget->layout()->geometry().size(), widget->preferredSize()); qApp->processEvents(); QCOMPARE(widget->geometry().size(), widget->preferredSize()); QCOMPARE(widget->layout()->geometry().size(), widget->preferredSize()); QGraphicsLayout::setInstantInvalidatePropagation(false); }