Well, your paintEvent() make the widget display text if the pixmap is null, which is the default state if the "pixmap" member.
Since you haven't started the thread, it couldn't have sent an image yet, so the "pixmap" will stay null.

Btw, your early exit in run() leaves the mutex locked and you are accessing "restart" once without proper locking.

Cheers,
_