Il te faut quand même un moyen d'indiquer au thread que l'appli va être fermée, et donc qu'il faut qu'il s'arrête. Or vu qu'il ne traitera que des événements Windows, ça veut dire utiliser une fonction Windows pour lui envoyer un message, donc connaître son identifiant Windows.
Tu pourrais tricher en utilisant la méthode Terminate de QThread, mais c'est très crade, et indigne d'un codeur de ton niveau 
À première vue, pour récupérer l'ID Windows d'un thread Qt, il faut utiliser
QThread::currentThreadId(). Malheureusement c'est une méthode statique qui donne seulement l'ID du thread en cours d'exécution, donc tu ne pourras pas récupérer l'ID du thread "hotkey" depuis le thread principal directement. Du coup, il faut que ce soit le thread "hotkey" lui-même qui lise cette info et la renvoie au thread principal d'une manière ou d'une autre.
Attention, si tu envisages une variable globale pour ça, elle doit être déclarée
volatile, et il faut aussi un mécanisme de synchronisation pour vérifier que le thread principal n'essaie pas de lire avant que le thread "hotkey" n'ait écrit l'info. Mais de toute façon, si tu regardes la doc de
PostThreadMessage, tu verras que les messages ne seront pas traités tant que le thread n'aura pas créé sa boucle de messages. Donc de toute façon, si tu veux faire les choses proprement, il faut que le thread principal vérifie que le thread "hotkey" soit prêt (qu'il ait récupéré son ID et créé sa boucle de message) avant d'essayer de communiquer avec lui ; regarde du côté des objets de synchronisation de Qt.
(Et je veux bien la récompense si tu rayes "distribution Linux" de ta phrase

)