Mark Summerfield schrieb:
On 2010-04-20, andre hotz wrote:
Hey,

I have a problem with my QThreads (running on windows). It is the first
time I use multithreading, so I am probably doing something wrong ;)

The situation is as follows: I have a QTreeWidget which works like a
filebrowser, listing a few thousand files. Creating
the treeitems from the files is pretty fast, but I also want the
treeWidget to display more information about the files.
This is taking some time depending on the quantity of the files. So what
I did is to first fill the treeView with all the filenames.
After that, I start an update-threat, which loops through all the items
in the treeWidget, gathers its data and fills the additional
columns in the treeView with the data. While the thread is updating the
treeWidget, the user can already work with the files and does not need
to wait for the update to finish.

This all works pretty well.

I think you've been pretty lucky to have it work at all!

hehe, yeah, I was pretty happy when I got it working the first time ;)

Qt does not provide any means of locking items or views. As a
consequence, Qt does _not_ support updating models, scenes, or items in
models, or items in widgets such as QTreeWidgetItems or
QTableWidgetItems, etc. outside the main (GUI) thread. So any such
update is potentially the source of a crash.

hm, yes, this might explain the crashes..

One technique that could be used is to hold the data in a thread-safe
data structure and read data from that into the GUI as needed (locking
the data structure or each item read from it as needed), and updating
the data from one or more secondary threads (locking as needed).


That sounds like it could work. Would it be possible to hold the data as you said, but when the update thread is finished, let it emit a signal to the treeWidget which then updates itself with the given data structure? Or does emitting signals from another thread also not work?


_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to