[Interest] QTableWidget performance
pengland at cmt-asia.com
Wed Mar 14 23:54:22 CET 2012
I've got an old legacy application that I started in Qt3 and have since
ported to Qt4. It uses a subclassed QTableWidget. I'm using about 8
columns. Data is added at various rates, but I would say by the end of
the day, it could have several thousand rows. To boot, I'm actually
kicking off multiple copies of this class within one process now. As
such, I'm starting to see poor performance as the day gets later. If I
tail the log, the log tells me it's gotten the data and updated it, but
the screen doesn't paint the new items until later.
Generally two things happen after getting a new message
1: Look through the last 200 - 300 records -- if it's an update, update
1B: The caveat here is there maybe something that should be updated, but
I'm assuming it's old at that point and don't care if it's repainted.
2: If it's new, insertRow( 0 ) and fill this row w/ the data.
Each time I insert a row, I store the identifier w/ it's "index" in a
deque. The deque generally only holds 200-300 records, so the look up
is quite fast. I am assuming that searching through
std::deque<my_map_t> (where my_map_t has a QString and int member only)
is faster than going through each row and examining the QTableWidgetItem
of a specific cell.
My main question is, insertRow() in a QTableWidget with 10 rows, as fast
as insertRow on a QTableWidget with 10,000 rows? I've done quite a bit
of housecleaning to make it quicker, and I've seen good results, but not
quite there yet, as I can visually see. I have loaded up a table in a
test mode, with some 20,000 rows of data, and can simulate adding a
couple of rows a time. I do not see the delay, so my guess is that
insertRow() is not that big of a deal. The problem is that means I have
no clue where the performance issue is. :(
The obvious questions is of course, should I use a QTableView instead?
My main resistance to this is that while the data is somewhat simple, I
already have a pretty complex system to filter what should be displayed
and what shouldn't, what colors should be displayed for visible items,
what font to use, and whether a sound should be played or not. This is
all configured by the user in the GUI.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Interest