Congratulations to our 2022 Qt Champions!

Reading data from TableView with C++ model in it.

  • Hello,

    I'm trying to read data in a specific, selected tableView row to pass it further. The view builds as:

                TableView {
                    anchors.fill: parent
                    model: mainUserHandle.usersAdventuresTable
                    TableViewColumn {
                        id: colAdventure
                        role: "name"
                        title: "Adventure Name"
                        width: rctUsersAdventures.width * 0.9
                    TableViewColumn {
                        id: colAward
                        role: "award"
                        title: "Award"
                        width: rctUsersAdventures.width * 0.099
                    onClicked: {
                        console.log("clicked to see adventure " + currentRow)
                        console.log("model.get(currentRow).name " + model.get(currentRow).name)   

    and all data shows correctly from


    which is a QList<QObject *> of:

    class AdventureOnUserData : public QObject
        Q_PROPERTY(int adventureId READ adventureId WRITE setAdventureId NOTIFY adventureIdChanged)
        Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
        Q_PROPERTY(int award READ award WRITE setAward NOTIFY awardChanged)
        Q_PROPERTY(int status READ status WRITE setStatus NOTIFY statusChanged)
        Q_PROPERTY(QString desc READ desc WRITE setDesc NOTIFY descChanged)
        Q_PROPERTY(QString clue READ clue WRITE setClue NOTIFY clueChanged)

    When I try to access the data in the model with

                        console.log("model.get(currentRow).name " + model.get(currentRow).name)   

    I get an error as:

    TypeError: Property 'get' of object AdventureOnUserData(0x1c44c2a06a0),AdventureOnUserData(0x1c44c2a0ea0),AdventureOnUserData(0x1c44c2a15a0),AdventureOnUserData(0x1c44c2a0e20),AdventureOnUserData(0x1c44c2a11a0),AdventureOnUserData(0x1c44c29fda0),AdventureOnUserData(0x1c44c2a14a0) is not a function

    How should I fetch the selected data here?

  • Moderators

    Hi @Verhoher,
    The error says it all. Are you sure your class AdventureOnUserData contains get function ? I think you have mistaken it w.r.t ListModel functions ?

  • @p3c0 said:

    The error says it all. Are you sure your class AdventureOnUserData contains get function ?

    Yes seems that I have misunderstood something. so a way to resolve this would be add something like

    Q_INVOKABLE QVariant get(int p_index)
        return QVariant::fromValue<usersAdventuresTable*>((l_userAdventureTable*)this->at(p_index));

    to mainUserHandle and call that in the onClicked? Will this work?

  • Moderators

    And where are you going to add this get method ? I think what you are trying to use is QObjectList-based model.
    You will find an example there which explains how to access the data from model. Particularly this line:
    color: model.modelData.color

    The properties of the object are not replicated in the model object, as they are easily available via the modelData object.

  • @p3c0 said:

    I think what you are trying to use is QObjectList-based model.

    Yes, you are right initially I was trying to do it by that example, but didn't manage to fully apply it for my scenario because I couldn't get

        ctxt->setContextProperty("myModel", QVariant::fromValue(dataList));

    to work, so I added the model as a QProperty as QList<QObject *> under a QObject I use in my App, and access it through it.

    and yeah it turns out I can just use


    to access it straight in QML, so the easiest solution. This probably was obvious, but I'm new to QML and didn't think of it.

    Thanks for the help :)

  • Moderators

    @Verhoher You're Welcome. Happy Coding :)

Log in to reply