signal is fileChanged ( const QString &) not fileChanged (QString)
and you need to add Q_OBJECT marco in worker class.

one more thing is, if we use signal/slot across threads we need to start local event loop with exec() at the end of the run function;