ИМХО, думаю, что в обоих случаях (PyQt5 и PySide2) у ошибки в PyCharm есть ошибка.
- QAbstractItemModel является QObject, поэтому он имеет те же методы QObject, а QObject имеет метод parent () (который является частью иерархии между QObject):
QObject *QObject::parent() const
Возвращает указатель на родительский объект.
- Также QAbstractItemModel обрабатывает иерархию между QModelIndex, поэтому ему нужен родительский метод (const QModelIndex &), который предоставляет родительский объект QModelIndex другого QModelIndex:
QModelIndex QAbstractItemModel::parent(const QModelIndex &index) const
Возвращает родителя элемента модели с указанным индексом. Если у элемента нет родителя, возвращается недопустимый QModelIndex.
Обычное соглашение, используемое в моделях, которые предоставляют древовидные структуры данных, состоит в том, что только элементы в первом столбце имеют дочерние элементы. В этом случае при переопределении этой функции в подклассе столбец возвращаемого QModelIndex будет равен 0.
При переопределении этой функции в подклассе следует избегать вызова функций-членов QModelIndex, таких как QModelIndex :: parent. (), поскольку индексы, принадлежащие вашей модели, будут просто вызывать вашу реализацию, что приведет к бесконечной рекурсии.
Примечание. Эта функция может вызываться через систему мета-объектов и из QML. Смотрите Q_INVOKABLE.
Другими словами, QAbstractItemModel имеет 2 parent()
методов (с другой сигнатурой): первый позволяет получить родительский объект QObject модели (так как это QObject), а второй - тот, который предоставляет родительский объект QModelIndex другого QModelIndex, который обрабатывает модель.
(Отказ от ответственности: я не использую Pycharm или другую IDE для автозаполнения) IMHO Pycharm должен обеспечивать оба автозаполнения чтобы пользователь мог выбрать, какой из методов он хочет переопределить (отметив, что первый - это метод publi c, а другой - абстрактный метод).
Следует отметить, что это не ошибка PySide2 или PyQt5, поскольку эта библиотека предоставляет не автозаполнение, а Pycharm. В качестве заключительного замечания я рекомендую прочитать документы Qt.
Publi c методы не переопределяются (в общем), поэтому наиболее подходящим является автозаполнение def parent(self, QModelIndex=None):
, поскольку это абстрактный метод, который должен быть переопределен, если Вы хотите создать экземпляры этого класса.