1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| #include <QtGui>
class MyQTreeWidgetItem :public QTreeWidgetItem
{
public :
MyQTreeWidgetItem ( QTreeWidgetItem * parent, int type = Type ):QTreeWidgetItem(parent,type){};
MyQTreeWidgetItem ( QTreeWidget * parent, int type = Type ):QTreeWidgetItem(parent,type){};
//reimplemente le teste
bool operator< ( const QTreeWidgetItem & other ) const
{
//on recupere la colone utilisee pour le test
const QTreeWidget * pTree =treeWidget ();
int colonne =pTree->sortColumn();
//on recupere les donnees situé dans la colone
QVariant q1= data ( colonne , 0 );
QVariant q2= other.data ( colonne , 0 );
//on verifie que les deux variants sont de même type
if (q1.type() ==q2.type())
{
//si se sont des int
if (q1.type()==QVariant::Int) return q1.toInt()<q2.toInt();
//si se sont des double
if (q1.type()==QVariant::Double) return q1.toDouble()<q2.toDouble();
}
//Sinon on appèle le comparateur de la class QTreeWidgetItem
return QTreeWidgetItem::operator<(other);
}
};
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QTreeWidget tree;
QStringList entete;
entete << "valeur 1" << "valeur 2" ;
tree.setHeaderItem(new QTreeWidgetItem((QTreeWidgetItem*)0,entete));
tree.setSortingEnabled(true);
srand(time(NULL));
//on cree une premiere branche avec
// valeur 1 : int entre 0 et 20
// valeur 2 : double aléatoire entre 0 et 20
MyQTreeWidgetItem *parentitem = new MyQTreeWidgetItem(&tree);
parentitem->setText(0,"premiere serie");
for (int i=0;i<20;++i)
{
MyQTreeWidgetItem *item = new MyQTreeWidgetItem(parentitem);
item ->setData (0, 0, QVariant(i));
item ->setData (1, 0, QVariant(static_cast<double >(rand())/RAND_MAX*i));
}
//on cree une deusieme branche avec
// valeur 1 : int entre 0 et 20
// valeur 2 : double aleatoire entre 0 et 20
parentitem = new MyQTreeWidgetItem(&tree);
parentitem->setText(0,"deusieme serie");
for (int i=0;i<20;++i)
{
MyQTreeWidgetItem *item = new MyQTreeWidgetItem(parentitem);
item ->setData (1, 0, QVariant(i));
item ->setData (0, 0, QVariant(static_cast<double >(rand())/RAND_MAX*i));
}
tree.resize(200, 800);
tree.expandAll();
tree.show();
QObject::connect(&tree, SIGNAL(clicked()), &app, SLOT(quit()));
return app.exec();
} |
Partager