You can use events or signals and slots.

But be careful with defining slots. Creating slots in a QThread subclass and calling them doesn't always run them in the thread.
I think the best approach is to create a QObject subclass and move the QObject object to a thread instead of subclassing QThread directly.