【问题标题】:setSelected in QTreeWidgetQTreeWidget 中的 setSelected
【发布时间】:2011-09-14 16:58:10
【问题描述】:

我有一个项目,我需要在代码中更改树小部件的选择。这需要在我清除树并重新填充后完成。

我正在尝试将适当的项目标记为“已选择”,同时我正在添加它们。这适用于根级别节点。但对于子节点,它没有。我需要将 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)

【问题讨论】:

  • 你能给我们看一些示例代码吗?
  • 您能否显示对temp.addChild(和treeObj.addTopLevelItems)的调用相对于对setSelected 的调用?
  • ^ 刚刚将它们添加到代码中。对此感到抱歉。

标签: python qt pyqt4


【解决方案1】:

文档中没有指定,但如果项目尚未添加到视图中,setSelected 将不执行任何操作:

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

所以,你应该要么

  • QTreeWidgetItem 的构造函数中传递treeObjtemp,使它们从一开始就成为视图的一部分
  • 或在调用setSelected(或其他函数,如setExpanded...)之前调用addChild/addTopLevelItem

我不知道为什么你的第二个代码甚至可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 2020-04-10
    • 2019-10-09
    • 2019-08-06
    • 2011-06-04
    相关资源
    最近更新 更多