#include #include #include #include #include class Foobar : public QObject { Q_OBJECT }; class ContainerConsumer : public QObject { Q_OBJECT Q_PROPERTY(QVariant container READ container WRITE setContainer) public: using QObject::QObject; QVariant container() const { return {}; } Q_INVOKABLE void setContainer(const QVariant& container) { qDebug() << "type" << container.typeName() << "canConvert" << container.canConvert(); if (container.canConvert()) { QSequentialIterable iterable = container.value(); qDebug() << "got iterable" << iterable.canReverseIterate(); auto it = iterable.begin(); qDebug() << "size" << iterable.size(); } } Q_INVOKABLE QVariant produce(const QString& type) { if (type == "std::vector") return QVariant::fromValue(std::vector{}); if (type == "QVector") return QVariant::fromValue(QVector{}); if (type == "QList") return QVariant::fromValue(QList{}); return {123}; } }; int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QQmlEngine engine; qmlRegisterType("bug", 1, 0, "ContainerConsumer"); QQmlComponent component(&engine); component.setData("import bug 1.0\n ContainerConsumer { container: produce('std::vecstor') }", QUrl()); // Correct in 5.13, QJSValue + crash in 5.14 //component.setData("import bug 1.0\n ContainerConsumer { container: produce('QVector') }", QUrl()); // Correct in 5.13, QJSValue + crash in 5.14 //component.setData("import bug 1.0\n ContainerConsumer { container: produce('QList') }", QUrl()); // QJSValue + crash in 5.13 and 5.14 component.create(); // note : QList doesn't work in 5.13 but QList does work return 0; } #include "main.moc"