Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Unable to edit QSqlTableModel from QML



  • I subclassed a class SqliteModel from QSqlTableModel. I want the model to be editable so reading the documentation I found that I need to reimplement the setData function. I implemented the function as below:

    bool SqliteModel::setData(const QModelIndex &index, const QVariant &value, int role)
    {
        if (index.isValid()) {
            bool ret = QSqlTableModel::setData(index, value, Qt::EditRole);
            qDebug() << ret << lastError(); // debug output
            if(ret) dataChanged(index, index);
            return ret;
        }
        return false;
    }
    

    However this always return false and the debug output is: false QSqlError("20", "Unable to fetch row", "datatype mismatch"). I am using the model inside QML (the items are correctly displayed and when I clicke the setData function is correctly called):

        ListView{
            anchors.fill: parent
            model: sqlmodel
            delegate: Label{
                text: model.linecolor
                MouseArea{
                    anchors.fill: parent
                    onClicked:{
                        model.linecolor = "hello"
                    }
                }
            }
        }
    

  • Moderators

    What is printed if you call:

    qDebug() << index.row() << value << role;
    

    Also, have you defined any role names? roleNames()



  • I get this:
    false QSqlError("20", "Unable to fetch row", "datatype mismatch").
    The rolenames are defined and correctly displayed.


  • Moderators

    @daljit97 said in Unable to edit QSqlTableModel from QML:

    , Qt::EditRole);

    Then you should probably pass the role and not editRole, otherwise model won't know which column to update.