Error importing extended QML type



  • Trying to extend Surface3DSeries, adding a property “topoFile” which has value of type QString. But the QML editor seems unable to import the extended type. I define the C++ class which will extend Surface3DSeries, with a Q_PROPERTY “topoFile”:

    class TopographicSeries : public QObject
    {
     Q_OBJECT
     Q_PROPERTY(QString topoFile READ getTopoFile WRITE setTopoFile )
    

    I register the extended type in main.cpp:

    int main(int argc, char *argv[])
    {
     QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    
     QGuiApplication app(argc, argv);
    
     qmlRegisterExtendedType<QSurface3DSeries, TopographicSeries>("Test", 1, 0, "Surface3DSeries");
    

    But the QML view displays "QML module not found" when I try to import the extended type in main.qml:

    import QtQuick 2.12
    import QtQuick.Window 2.12
    import QtDataVisualization 1.0
    import Test 1.0   * QML module not found (Test)
    

    All of my project files are in the same directory, and my .pro file includes this:

    # Additional import path used to resolve QML modules in Qt Creator's code model
    QML_IMPORT_PATH = $$PWD
    

    Does anyone know what I am doing wrong?

    Thanks
    Tom



  • Another mysterious problem. As a test I removed reference to the Surface3DSeries "topoFile" property from main.qml, and instead get topography from an ItemModelSurfaceDataProxy defined in the qml. However now when I run the app I get this error in the output:

    QQmlApplicationEngine failed to load component
    qrc:/main.qml:19 Invalid property assignment: "seriesList" is a read-only property
    

    seriesList is a property of Surface3D. Why in the world would something be trying to write that property if the qml makes no reference to the extended QSurface3DSeries "topoFile" property? If I remove the call to qmlRegisterExtendedType() in main.cpp, the app executes without error.

    Here is the qml file:

    import QtQuick 2.0
    import QtQuick.Window 2.12
    import QtDataVisualization 1.2
    
    Window {
        visible: true
        id: mainWindow
        width: 640
        height: 480
        title: qsTr("TopoSeries test")
    
        Item {
            width: 640
            height: 480
    
            Surface3D {
                width: parent.width
                height: parent.height
                Surface3DSeries {
                    ItemModelSurfaceDataProxy {
                        itemModel: dataModel
                        // Mapping model roles to surface series rows, columns, and values.
                        rowRole: "longitude"
                        columnRole: "latitude"
                        yPosRole: "elevation"
                    }
                }
            }
            ListModel {
                id: dataModel
                ListElement{ longitude: "20"; latitude: "10"; elevation: "1000"; }
                ListElement{ longitude: "21"; latitude: "10"; elevation: "1200"; }
                ListElement{ longitude: "22"; latitude: "10"; elevation: "900"; }
                ListElement{ longitude: "23"; latitude: "10"; elevation: "1100"; }
                ListElement{ longitude: "20"; latitude: "11"; elevation: "1000"; }
                ListElement{ longitude: "21"; latitude: "11"; elevation: "1300"; }
                ListElement{ longitude: "22"; latitude: "11"; elevation: "1250"; }
                ListElement{ longitude: "23"; latitude: "11"; elevation: "1200"; }
                ListElement{ longitude: "20"; latitude: "12"; elevation: "1100"; }
                ListElement{ longitude: "21"; latitude: "12"; elevation: "1000"; }
                ListElement{ longitude: "22"; latitude: "12"; elevation: "950"; }
                ListElement{ longitude: "23"; latitude: "12"; elevation: "900"; }
                ListElement{ longitude: "20"; latitude: "13"; elevation: "850"; }
                ListElement{ longitude: "21"; latitude: "13"; elevation: "800"; }
                ListElement{ longitude: "22"; latitude: "13"; elevation: "750"; }
                ListElement{ longitude: "23"; latitude: "13"; elevation: "700"; }
            }
        }
    }
    
    
    

 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.