Модель фильтра в виде дерева - PullRequest
0 голосов
/ 26 марта 2020

Это дополнительный вопрос к этому , который уже исправлен.


В моей модели есть несколько пользовательских функций, которые вызываются из моего дерева. Например, в моем классе ItemModel есть две пользовательские функции:

class ItemModel : public QAbstractItemModel
{
    // ...

    Q_INVOKABLE void addExpandedItem(const QModelIndex &index);
    Q_INVOKABLE void removeExpandedItem(const QModelIndex &index);
}

Использование класса ItemModel в качестве свойства sceneModel в ParentClass:

class ParentClass : public QObject
{
    Q_OBJECT
    Q_PROPERTY(ItemModel * sceneModel READ sceneModel CONSTANT)

private:
    ItemModel *m_sceneModel;

}

В в моем дереве QML я вызываю / , вызывая такие пользовательские функции, как:

TreeView {
    model: parentClass.sceneModel
    selection: ItemSelectionModel {
        model: parentClass.sceneModel
    }

    onExpanded: {
        model.addExpandedItem(index) // Calling custom function
    }
    onCollapsed: {
        model.removeExpandedItem(index) // Calling custom function
    }
}

Теперь, когда я собираюсь фильтровать свою модель по QSortFilterProxyModel Как описано в оригинальный вопрос , у меня возникают проблемы с вызовом этих пользовательских функций через QSortFilterProxyModel модель прокси. Я получаю такие ошибки:

qrc:/.../...Tree.qml:191: TypeError: Property 'addExpandedItem' of object QSortFilterProxyModel(0x1f197c082c0) is not a function

Поэтому мне интересно, как я мог бы вызывать пользовательские функции моей модели через QSortFilterProxyModel модель прокси.

1 Ответ

0 голосов
/ 07 апреля 2020

Измените его на QVariant в Q_PROPERTY вашего родительского класса. Функция Getter должна возвращать ваш экземпляр класса следующим образом:

return QVariant::fromValue(m_sceneModel);

Это работает, когда я делаю это так. Кроме того, вы уверены, что TreeView передает QModelIndex в ваш метод? Насколько мне известно, он проходит только int, тогда как реальный модельный индекс может быть доступен только функцией C ++ data.

...