setSelected в QTreeWidget - PullRequest
       9

setSelected в QTreeWidget

0 голосов
/ 14 сентября 2011

У меня есть проект, в котором мне нужно изменить выделение виджета дерева в коде. Это нужно сделать после того, как я уберу дерево и снова заполню его.

Я пытаюсь пометить соответствующий элемент как "выбранный", пока добавляю его. Это работает для узлов корневого уровня. Но для дочерних узлов это не так. Мне нужно сохранить QTreeWidgetItem в другой переменной и пометить его как выбранный после того, как дерево полностью заполнено. Почему это происходит?

Это не работает:

def refreshTree(self):
    treeObj.clear()
    for item in items:
        temp = QTreeWidgetItem(0)
        for key, val in item.subitems().items():
            childTemp = QTreeWidgetItem(0)
            ...setup text, font, etc...

            if(condition1):
                childTemp.setSelected(True)
            temp.addChild(childTemp)

        if(!condition1 and condition2):
            temp.setSelected(True)

        treeObj.addToplevelItem(temp)

Это делает:

def refreshTree(self):
    treeObj.clear()
    for item in items:
        temp = QTreeWidgetItem(0)
        for key, val in item.subitems().items():
            childTemp = QTreeWidgetItem(0)
            ...setup text, font, etc...

            if(condition1):
                selTemp = childTemp
            temp.addChild(childTemp)

        if(!condition1 and condition2):
            temp.setSelected(True)
        elif(selTemp):
            selTemp.setSelected(True)
        treeObj.addToplevelItem(temp)

1 Ответ

2 голосов
/ 15 сентября 2011

Не указано в документации, но setSelected ничего не делает, если элемент еще не добавлен в представление:

inline void QTreeWidgetItem::setSelected(bool aselect)
{ if (view) view->setItemSelected(this, aselect); }

Итак, вы должны либо

  • передать treeObj или temp в конструктор вашего QTreeWidgetItem, чтобы сделать их частью представления с самого начала
  • или позвоните addChild / addTopLevelItem перед вызовом setSelected (или другими функциями, такими как setExpanded ...).

Я не знаю, почему ваш второй код даже работал.

...