void tst_QItemEditorFactory::createCustomEditor() { QPointer<MyEditor> creator = new MyEditor; QPointer<MyEditor> creator2 = new MyEditor; { QItemEditorFactory editorFactory; editorFactory.registerEditor(QVariant::Rect, creator); editorFactory.registerEditor(QVariant::RectF, creator); //creator should not be deleted as a result of calling the next line editorFactory.registerEditor(QVariant::Rect, creator2); QVERIFY(creator); //this should erase creator2 editorFactory.registerEditor(QVariant::Rect, creator); QVERIFY(creator2.isNull()); QWidget parent; QWidget *w = editorFactory.createEditor(QVariant::Rect, &parent); QCOMPARE(w->metaObject()->className(), "QDoubleSpinBox"); QCOMPARE(w->metaObject()->userProperty().type(), QVariant::Double); } //editorFactory has been deleted, so should be creator //because editorFActory has the ownership QVERIFY(creator.isNull()); QVERIFY(creator2.isNull()); delete creator; }
QWidget* DelegatingItemEditorFactory::createEditor(int userType, QWidget* parent) const { QWidget* editor = QItemEditorFactory::createEditor(userType, parent); return (!editor) ? _parentFactory->createEditor(userType, parent) : editor; }