Is it actually possible to use a C++ QList as a model for a QML PathView?



  • I've already asked this question on stack overflow, but I thought I'd ask here where the real Qt experts are.

    "http://stackoverflow.com/questions/15753419/qt-qml-data-model-doesnt-seem-to-work-with-c":http://stackoverflow.com/questions/15753419/qt-qml-data-model-doesnt-seem-to-work-with-c

    The executive summary is that if I have a QML ListModel, I can set that as the model for either a QML ListView or a QML PathView. If I have C++ objects in a QList<>, which is what some of the QML data model examples do, I can create a working model for QML ListViews, but not QML PathViews. There seems to be something that ListView has that QList<MyClass> doesn't - some glue that gets PathView working but is missing when I make my QList.

    I'm using Qt 4.8.4 on Windows. Any ideas? Does anyone know of a sample or an example that does this? Something that populates a PathView with a C++ model? Any C++ model, QList-based or QAbstractListModel-based, would be fine.



  • So I tried out a horrible hack - here it is:

    main.cpp:
    @
    ...
    dataList.append( new DataObject( "c++ entry6 (purple)", "purple" ) );

    QmlApplicationViewer viewer;
    QDeclarativeContext * context = viewer.rootContext();
    context->setContextProperty( "cppModel", QVariant::fromValue(dataList) );
    context->setContextProperty( "cppModelCount", QVariant::fromValue(dataList.count()) );
    viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
    ...
    

    @

    cpptest.qml:

    @
    ...
    interactive: true
    //model: qmlModel
    model: cppModel

        delegate: Rectangle {
            width: 100
            height: 100
            color: colour
            Text {
                anchors.centerIn: parent
                text: name
            }
        }
    
    
        path: Path {
            startX: - my_path_view.width * cppModelCount / 2 + my_path_view.width / 2
            startY: my_path_view.height / 2
            PathLine {
                x: my_path_view.width * cppModelCount / 2 + my_path_view.width / 2
                y: my_path_view.height / 2
            }
        }
    ...
    

    @

    This actually produced the expected result. But its a terrible hack. Why is this not working properly? I can't believe that this is as-designed - it really does seem to be a Qt bug in the Path object, or the C++ bindings. cppModel.count, according to my debug printouts in the qml, is never available - in fact, the object that cppModel is bound to has no members at all.

    I've build Qt before and I have the source - is there any place that anyone could point me to where I could start debugging this?



  • I got some help from a couple of experts on IRC (#qt-qml) last night and my example is working now. I've answered the StackOverflow question that I linked to above if anyone is interested.


Log in to reply
 

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