ThreadWeaver: using QObject's as Jobs

Mirko Boehm mirko at
Mon Nov 24 22:00:45 GMT 2014

Hi Milian!

Man, I totally thought this is absolutely intuitive :-) I will write something up as a blog post over the weekend. In the meantime, I am trying to answer your question below.

> On 24 Nov 2014, at 01:57, Milian Wolff <mail at> wrote:
> Could you please document, e.g. by adding another example, on how one is 
> supposed to use Job classes that are QObjects, i.e. have signals/slots? There 
> is this strange QObjectDecorator thingy which I don't quite get, it looks like 
> its supposed to add some signals to another job. But what if my job already is 
> a QObject, since it has its own signals that it emits when data is received? 
> Can I inherit from QObjectDecorator and pass "this" as the JobInterface 
> *decoratee?

The decorator wraps and object and acts as a QObject. It does not really care if the wrapped job is a QObject already. It will add defined signals to the job. 

There are two ways to use it: The decorator can be used to wrap another job without defining a new class. Or it can be inherited to give the result a new name. By default it assumes that it owns the wrapped object, this can be turned off in the constructor. 

Decorators act like Matroska puppets, multiple decorators can be stacked. They are the proxy models of jobs :-) The additional complexity in C++ is that if the decoratee is not a shared pointer, it needs to be memory managed. The concept is explained here:

Hope this helps, 

Mirko Boehm | mirko at | KDE e.V.
FSFE Fellow, FSFE Team Germany
Qt Certified Specialist
Request a meeting:

More information about the kde-core-devel mailing list