2011-11-08 4 views
1

나는 QTreeWidgetItems를 잔뜩 가진 QTreeWidget을 가지고있다. 각 QTreeWidgetItem에는 QDateTime 형식의 시간 소인이 있습니다. QTreeWidget은 타임 스탬프별로 정렬됩니다. 타임 스탬프별로 정렬 된 QTreeWidgetItems 목록도 있습니다. 내 QTreeWidgetItems의 목록을 QTreeWidget에 추가하고 QTreeWidget에 QTreeWIdgetItems의 결합 된 정렬 된 목록으로 끝내기를 원합니다. 내가 QTreeWidgetItems의 두리스트 결합하고 어떻게QTreeWidgetItems의 두 정렬 목록을 병합하고 정렬 할 수 있습니까?

현재이는 다음과 같습니다

>>> l1 = [1, 3, 4, 7] 
>>> l2 = [0, 2, 5, 6, 8, 9] 
>>> sorted(l1 + l2) 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

: 그 병합 알고

#1 
    #self is my QTreeWidget class 
    numItems = self.topLevelItemCount() 
    #items is the new list of QTreeWIdgetItems to be added 
    numAddItems = len(items) 

    if numAddItems == 0: 
     return 

    while addItemIndex < numAddItems: 
     addItem = items[addItemIndex] 

     if itemIndex < numItems: 
      item = self.topLevelItem(itemIndex) 
      addItemDateTime = items[addItemIndex].getTimestamp() 
      itemDateTime = item.getTimestamp() 
      if addItemDateTime < itemDateTime: 
       self.insertTopLevelItem(itemIndex, addItem) 
       addItemIndex += 1 
     else: 
      self.addTopLevelItem(addItem) 
      addItemIndex += 1 
     itemIndex += 1 
     numItems = self.topLevelItemCount() 

및 정렬이 개 파이썬 목록을, 나는 이런 식으로 뭔가를 할 수 QTreeWidget에는 sortItems() 메서드가 있다는 것을 알고 있습니다. QTreeWidget에 QDateTime을 사용하여 정렬하도록하려면 어떻게해야합니까?

#2 
#self is a QTreeWidget 
#get a list of all the QTreeWidgetItems in the QTreeWidget 
currentItems = [] 
numItems = self.topLevelItemCount() 
for i in range(numItems): 
    currentItems.append(self.topLevelItem(i)) 
#clear the QTreeWidget 
self.clear() 
#perform a merge sort on the list of all the QTreeWidgetItems 
items = self.mergesort(currentItems + newItems) 
for item in items: 
    self.addTopLevelItem(item) 

그래서 QTreeWidgetItems 내 두 목록을 결합 할 수있는 더 좋은 방법은 무엇입니까 : 나는 또한이 같은 뭔가를 할 수

?

+1

나는 체크하지 않았지만'정렬 (11 + 12, 키 = 람다 x : x.getTimestamp())'하다고 느낀다. –

답변

0

나는 결국 내 파이썬 코드에서 이런 짓을 : 그러나

sortedItems = sorted(currentItems, key=lambda x: x.getTimestamp()) 

, 나는 C++에서 응용 프로그램을 재 작성했고, 이것은 내가 C++로 한 것입니다 :

void TreeWidget::sortTreeWidgetItems(QVector<LogEvent *> currentItems) { 
    qSort(currentItems.begin(), currentItems.end(), compareLogEventsByTimestampDesc); 
} 

bool compareLogEventsByTimestampDesc(LogEvent *eventA, LogEvent *eventB) { 
    QDateTime aTimestamp = eventA->getTimestamp(); 
    QDateTime bTimestamp = eventB->getTimestamp(); 
    return (aTimestamp > bTimestamp); 
} 

경우 LogEvent 상속 QTreeWidgetItem.

관련 문제