2014-05-21 82 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();