LINUX.ORG.RU

Как установить значение Qt.DisplayRole для каждой строки в QTreeWidget?

 , ,


0

1

Приветствую. Столкнулся со следующей проблемой. Для примера есть вот такой JSON (settings):

{
  "keyboard-layout": [
    "us",
    "ru"
  ],
  "keyboard-variant": [
    "chr",
    ""
  ]
}

и такой код:

for key, value in layouts:
    if key in settings["keyboard-layout"]:
        self.layout_item = QTreeWidgetItem(self.ui.layouts)
        self.layout_item.setData(0, Qt.DisplayRole, value)
        self.layout_item.setData(0, Qt.UserRole, key)
        self.ui.layouts.addTopLevelItem(self.layout_item)
        for key, values in variants:
            value = values.split(":")[0]
            description = values.split(":")[1]
            if value in self.layout_item.data(0, Qt.UserRole):
                for key in settings["keyboard-variant"]:
                    if key == "":
                        self.layout_item.setData(1, Qt.DisplayRole, "Empty")
                        self.layout_item.setData(1, Qt.UserRole, "")
                    else:
                        self.layout_item.setData(1, Qt.DisplayRole, description)
                        self.layout_item.setData(1, Qt.UserRole, key)

Проблема заключается в следующем: при любом условии значения Qt.DisplayRole и Qt.UserRole устанавливаются на всю колонку целиком, а не на конкретные строки. В результате, если ключ равен "", то значение «Empty» установится на всю колонку, и каждая строка в ней будет с этим значением (а не только та, что нужно). Подскажите, есть ли способ индивидуального назначения itemData для каждой строки?