Как я возвращаю свой объект Python от QVariant в PyQt4?

Я создаю подкласс QAbstractItemModel быть отображенным в QTreeView.

Мой index() и parent() функция создает QModelIndex использование QAbstractItemModel наследованная функция createIndex и если это row, column, и data необходимый. Здесь, для тестирования, данные являются строкой Python.

class TestModel(QAbstractItemModel):
    def __init__(self):
        QAbstractItemModel.__init__(self)

    def index(self, row, column, parent):
        if parent.isValid():
            return self.createIndex(row, column, "bar")
        return self.createIndex(row, column, "foo")

    def parent(self, index):
        if index.isValid():
            if index.data().data() == "bar":                          <--- NEVER TRUE
                return self.createIndex(0, 0, "foo")
        return QModelIndex()

    def rowCount(self, index):
        if index.isValid():
            if index.data().data() == "bar":                          <--- NEVER TRUE
                return 0
        return 1

    def columnCount(self, index):
        return 1

    def data(self, index, role):
        if index.isValid():
            return index.data().data()                                <--- CANNOT DO ANYTHING WITH IT
        return "<None>"

В index(), parent(), и data() функции я должен вернуть свои данные. Это стало a QVariant. Как я возвращаю свой объект Python от QVariant?

5
задан Didier Trosset 25 February 2010 в 10:59
поделиться

2 ответа

Ключевым моментом является использование internalPointer () непосредственно в QModelIndex , вообще не имея дело с QVariant .

class TestModel(QAbstractItemModel):
    def __init__(self, plan):
        QAbstractItemModel.__init__(self)

    def index(self, row, column, parent):
        if not parent.isValid():
            return self.createIndex(row, column, "foo")
        return self.createIndex(row, column, "bar")

    def parent(self, index):
         if index.internalPointer() == "bar":
            return self.createIndex(0, 0, "foo")
        return QModelIndex()

    def rowCount(self, index):
        if index.internalPointer() == "bar":
            return 0
        return 1

    def columnCount(self, index):
        return 1

    def data(self, index, role):
        if role == 0:  # Qt.DisplayRole
            return index.internalPointer()
        else:
            return None
4
ответ дан 18 December 2019 в 10:44
поделиться

Вы пробовали это?

my_python_object = my_qvariant.toPyObject()

http://pyqt.sourceforge.net/Docs/PyQt4/qvariant.html#toPyObject (просто для полноты, но там особо не на что смотреть ...)

12
ответ дан 18 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: