2014-05-21 83 views
1

我有qtreewidgettoplevelitems。每個toplevelitem有4個childeren,每個孩子都有特殊的價值,所有頂尖項目的第一個孩子是它的父母成本,我想sort這個toplevelitems根據這個成本,但我不知道如何做到這一點?我的想法是保持這toplevelitems和他們的成本mapaddtake他們每次添加toplevelitem,但我正在尋找更好的方法。 在此先感謝。排序qtreewidget上層項目基於子數據

回答

1

默認情況下,樹部件根據文本對項目進行排序,但您可以通過覆蓋QTreeWidgetItem的運算符<()來更改它。下面是自定義的QTreeWidgetItem與特定運營商的例子(見註釋):

class TreeWidgetItem : public QTreeWidgetItem 
{ 
public: 
    // The constructors. Add more, if needed. 
    TreeWidgetItem(QTreeWidget *parent, const QStringList &strings, 
        int type = Type) 
     : QTreeWidgetItem(parent, strings, type) 
    {} 

    TreeWidgetItem(QTreeWidgetItem *parent, const QStringList &strings, 
        int type = Type) 
     : QTreeWidgetItem(parent, strings, type) 
    {} 

    // Compares two tree widget items. The logic can be changed. 
    bool operator<(const QTreeWidgetItem& other) const 
    { 
     // Get the price - the first child node 
     int price1 = 0; 
     if (childCount() > 0) 
     { 
      QTreeWidgetItem *firstChild = child(0); 
      price1 = firstChild->text(0).toInt(); 
     } 

     // Get the second price - the first child node 
     int price2 = 0; 
     if (other.childCount() > 0) 
     { 
      QTreeWidgetItem *firstChild = other.child(0); 
      price2 = firstChild->text(0).toInt(); 
     } 
     // Compare two prices. 
     return price1 < price2; 
    } 
}; 

這裏是如何類可以用QTreeWidget使用:

// The sortable tree widget. 
QTreeWidget tw; 
tw.setSortingEnabled(true); 
QTreeWidgetItem *item1 = new TreeWidgetItem(&tw, QStringList() << "Item1"); 
QTreeWidgetItem *child1 = new TreeWidgetItem(item1, QStringList() << "10"); 

QTreeWidgetItem *item2 = new TreeWidgetItem(&tw, QStringList() << "Item2"); 
QTreeWidgetItem *child2 = new TreeWidgetItem(item2, QStringList() << "11");  
tw.show();