2010-05-27 4 views
1

Salutations, Je suis nouveau à QT (4.6) et j'ai quelques questions de base concernant son mécanisme d'événement. Je viens de fond Swing donc j'essaie de le comparer avec QT.Questions de base sur la gestion des événements/Threading?

1) La boucle de traitement des événements s'exécute-t-elle dans un thread séparé? (comme le fil EventDispatch dans Swing)?

2) Si nous ouvrons plusieurs 'QMainWindow', sont-ils exécutés dans plusieurs threads?

3) Quelle est la meilleure façon d'exécuter un processus intensif dans un filetage séparé? (comme SwingWorker dans Swing?)

4) Si le processus intesive s'exécute dans un thread séparé, est-il possible d'appeler des méthodes UI comme update(), repaint() à partir de ce processus?

merci d'avance.

Répondre

3

une boucle de l'événement en cours d'exécution dans le même fil

2 Tous les éléments d'interface vivent dans le même fil que celui de votre fonction main() exécutée.

3 Il existe une classe QThread qui vous permet d'avoir un thread avec une boucle d'événement distincte. Il existe une classe abstraite QRunable pour pouvoir exécuter des tâches répétitives longues dans des threads distincts à l'aide de QThreadPool. 4 update() et repaint() sont des slots et la meilleure façon de les appeler à partir d'un thread séparé est d'utiliser la connexion en file d'attente avec un signal dans votre objet qui vit dans un thread séparé (lire la documentation QObject :: connect

Vous pouvez trouver toutes les informations nécessaires en lisant la documentation des classes que j'ai mentionnées.

+0

merci pour la réponse, utilise QtConcurrent :: run() mieux que l'extension QThread, QRunnable? –

+1

Oui, ça devrait être mieux dans la plupart des cas mais je ne l'ai pas encore essayé par moi-même. – VestniK