代码之家  ›  专栏  ›  技术社区  ›  Natim

如何从qlistwidget中删除qlistwidgetitem并刷新显示?

  •  2
  • Natim  · 技术社区  · 14 年前

    我正在使用qlistwidget显示qlistwidgetitem的列表

    此列表是从文件中读取的。当我关闭文件时,我想清空列表。

    我在我的:

    class QuestionsList(QtGui.QListWidget):
        def __init__(self, parent):
            super(QuestionsList, self).__init__(parent)
            self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
            self.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
            self.setProperty("showDropIndicator", False)
            self.setAlternatingRowColors(True)
    
            self.quiz = None
    
        def loadQuiz(self, quiz):
            self.quiz = quiz
    
            self.flush()
    
            if quiz is not None:
    
                i = 1
                for question in quiz.questions_list:
                    self.addItem(QuestionItem(i, question, self))
                    i += 1
    
    
        def flush(self):
            for item in [self.item(i) for i in xrange(self.count())]:
                print unicode(item.text())
                self.removeItemWidget(item)
                del item
    

    loadQuiz方法有效,flush方法打印每个项的文本,但removeitemWidget方法和del item方法都不能清空列表。

    我该怎么做?

    谢谢

    3 回复  |  直到 14 年前
        1
  •  2
  •   Kamil Klimek    14 年前

    为什么不在qlistwidget上使用clear方法?

        2
  •  4
  •   Community holdenweb    7 年前

    我知道这是 already answered ,但我遇到这个问题是为了找到一种删除 选定的 个项目。

    可以这样做:

    def removeSelected(self):
        for item in self.selectedItems():
            self.takeItem(self.row(item))
    

    希望这能帮上忙!

        3
  •  0
  •   Natim    14 年前

    实际上,removeitemwidget不能用于此目的。

    这是我的解决方案

    def flush(self):
        while self.count() > 0:
            self.takeItem(0)
    

    方法takeItem(0)的工作方式与堆栈中的pop()类似,takeItem(count()-1)的工作方式与队列中的pop()类似。