It seems clear to me that there is a performance loss caused by the fact
that the compare() method (which is obviously a bottleneck for the
sorting routine) is now in the script instead of the binary Qt library.


Hi Fernando,

It's not clear to me, not at least without seeing your code. Can you post it, or post some digest of it?


Hi Troy,

Below is a simplified code that suffers from the same problem. On the other side, I agree that I may be wrong about blaming the interface between C++ and Python for degrading the performance in this particular case. However, this is just what my intuition (which is wrong no less than often :-)) tells me. It seems to me that if the Qt library had support for numerical key comparisions within itself the whole process would be faster without so many changes between C++ and Python code.

Since customized sorting for ListViews seems like such a common task for
me, I am wondering whether I did something wrong, or if there is another
way of doing this within PyQt.


Have you tried re-implementing QListViewItem.key() ?



No I did not try that yet. Anyway, it seems that I would not be able to get much from that since I would still be bound to the return type of QListViewItem.key() which is QString.


Now for the code:


BEGIN_OF_CODE

from qt import *
import sys

# QListViewItem Subclass
class MyQListViewItem(QListViewItem):
   # C++ Prototype
   # int MyListViewItem::compare( QListViewItem *i, int col,
   #                             bool ascending ) const
   def compare( self, i, col, ascending ):
       x = self.key( col, ascending ).toInt( );
       y = i.key( col, ascending).toInt( );
       return x[0]-y[0];

# Main program

app=QApplication(sys.argv)

lst  = QListView();
lst.addColumn("Count");

for i in range(1000):
   item = MyQListViewItem(lst, "%s" % i)

app.setMainWidget(lst)
lst.show()
app.exec_loop()

END_OF_CODE

_______________________________________________
PyKDE mailing list    [EMAIL PROTECTED]
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde

Reply via email to