You should give a bit more info I think.
I may only say that I use a QTableWidget and load 50000+ rows in about 3 seconds. I have a QLineEdit and a timer that fires every 0,5 seconds. In the timer routine I check if the QLineEdit content is changed and if it is, I "zap" the QTableWidget and load al the data back... it's quicker since the dbf is small and local.
Probably it's not the best solution but it works for me. Quick and dirty and able to handle my needs and dbfs.
What is best for you can only be determined when you tell us about the data source: local/lan, number of rows, number of columns, kind of cells, if you keep a copy of your data in a model... if you have just 1000 records I think my solution is ok...