Вызовите метод setData QAbstractTableModel из QML - PullRequest
1 голос
/ 04 июня 2019

Я пытаюсь создать полностью общую связь между QML TableView и моим классом C ++, который подклассов QAbstractTableModel. До сих пор я могу читать данные с помощью метода data, так как это выполняется внутри модуля TableView. Однако из того, что я прочитал в SO, мне нужно позвонить setData на стороне QML. Проблема в том, что заголовок функции выглядит следующим образом:

bool setData(const QModelIndex &index,
                 const QVariant &value,
                 int role = Qt::EditRole) override;

Чтобы вызвать его, мне нужен QModelIndex, который я не знаю, как получить на стороне QML. Буду признателен за пример QML.

Редактировать: я обошел эту проблему, обернув setData следующим образом:

Q_INVOKABLE bool setData(const int row,
                             const int column,
                             const QVariant& value);

bool CVarTableModel::setData(const int row,
                             const int column,
                             const QVariant& value)
{
    return setData(index(row, column), value);
}

Теперь я могу вызвать его прямо на стороне QML. Проблема в том, что хотя фактический setData вызывается сейчас, сигнал dataChanged не заставляет QML TableView обновить ячейку ... Есть ли что-то еще, что мне не хватает?

1 Ответ

0 голосов
/ 18 июня 2019

Я, вероятно, могу ответить на ваши изменения. Возможно, вы не излучаете сигнал dataChanged() в вашей функции setData. Это объясняет, почему представление не обновляется.

Из QAbstractTableModel :: setData () Документация :

Сигнал dataChanged () должен подаваться, если данные были успешно установлены.

Кроме того, о вашем первоначальном вопросе. Вы можете использовать метод index из qml: model.setData(model.index(row,column), data), чтобы избежать переопределения setData.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...