On 26/08/2016 09:33, Etienne Sandré-Chardonnal wrote:
Hi,

I have an object which subclasses QThread for performing an asynchronous
operation. Before any objection rises about that, I know that for most
uses QThread subclassing is not the way to go, and creating an object
which is pushed to a regular QThread is better, and I'm doing it 99% of
the time, but here it was more straightforward to simply subclass
QThread and overload run(), and no event loop is needed. This works fine.

Now I would like the run() function to make the QThread subclass emit
signals. If I just do "emit mySignal()" inside run(), my guess is this
will not work unless there is a special mechanism handling this.

Can I do this, or do I need a full event loop, an object living inside
the QThread, and a queued connection between signals? (ie the regular
QThread use)

Yes you can do this. Emitting signals from a QThread is fine. It is the thread affinity of the receiver compared to the thread from which the signal is emitted that is checked. Where people trip up is using a QThread subclass as the receiver, as the QThread object itself has affinity with the thread in which it was created (often the main thread).

Oh and there is also nothing wrong with subclassing QThread. Which approach you choose is dependent upon what you want to do.

Cheers,

Sean


Thanks!


_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest


--
Dr Sean Harmer | sean.har...@kdab.com | Managing Director UK
KDAB (UK) Ltd, a KDAB Group company
Tel. +44 (0)1625 809908; Sweden (HQ) +46-563-540090
Mobile: +44 (0)7545 140604
KDAB - Qt Experts
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to