void tst_QFormLayout::replaceWidget() { QWidget w; QFormLayout *layout = new QFormLayout(); w.setLayout(layout); QLineEdit *edit1 = new QLineEdit(); QLineEdit *edit2 = new QLineEdit(); QLineEdit *edit3 = new QLineEdit(); QLabel *label1 = new QLabel(); QLabel *label2 = new QLabel(); layout->addRow("Label", edit1); layout->addRow(label1, edit2); // Verify controls not in layout QCOMPARE(layout->indexOf(edit3), -1); QCOMPARE(layout->indexOf(label2), -1); // Verify controls in layout int editIndex = layout->indexOf(edit1); int labelIndex = layout->indexOf(label1); QVERIFY(editIndex > 0); QVERIFY(labelIndex > 0); int rownum; QFormLayout::ItemRole role; // replace editor layout->replaceWidget(edit1, edit3); edit1->hide(); // Not strictly needed for the test, but for normal usage it is. QCOMPARE(layout->indexOf(edit1), -1); QCOMPARE(layout->indexOf(edit3), editIndex); QCOMPARE(layout->indexOf(label1), labelIndex); rownum = -1; role = QFormLayout::SpanningRole; layout->getWidgetPosition(edit3, &rownum, &role); QCOMPARE(rownum, 0); QCOMPARE(role, QFormLayout::FieldRole); layout->replaceWidget(label1, label2); label1->hide(); QCOMPARE(layout->indexOf(label1), -1); QCOMPARE(layout->indexOf(label2), labelIndex); layout->getWidgetPosition(label2, &rownum, &role); QCOMPARE(rownum, 1); QCOMPARE(role, QFormLayout::LabelRole); }