2010-10-23 28 views
1

Je fais un programme de test d'interface web qui devrait ouvrir deux URLs simultanément dans deux fenêtres webkit.QT: Comment ouvrir plusieurs fenêtres (QWidgets) à la fois?

J'ai déjà fait le code pour l'automatisation du test.

1) fenêtre bouton pousse l'utilisateur de Go 'et WebKit (QWidget) ouvre

2) objet de la classe TestBot effectue des tests

3) Ferme

Ma question: Après avoir cliqué sur le bouton 'Go', comment puis-je ouvrir deux (ou trois ou plus) fenêtres webkit (QWidget), je veux dire, comment lancer plusieurs TestBots simultanément afin qu'ils fassent tout le travail en parallèle? J'ai compris que j'ai besoin de regarder les multithreads, je suis arrivé, j'ai besoin d'hériter QThread dans ma définition de classe TestBot en tant que 'classe TestBot: public QThread', mais est-ce la bonne solution et est-ce que je fais bien? Que faire ensuite?

Puis-je simplement écrire du code comme:

QThread process1; 
QThread process2; 
process1->start(); 
//some code here 
process1->quit(); 

process2->start(); 
//some code here 
process2->quit(); 

à tout faire fonctionner en parallèle? Je suis un débutant dans le monde de Winapp, je suis venu de la programmation Web. J'espère pour votre aide!

Répondre

1

Vous pouvez essayer d'utiliser les fonctions dans le QtConcurrent namespace pour les tâches asynchrones, spécialement le run.

+1

Mais rappelez-vous, que vous ne pouvez pas toucher les classes gui en dehors du thread gui –

+0

Oui, je sais. Je voudrais ouvrir tous les widgets dans le thread Gui et lancer des tâches dans les threads de travail en utilisant le QtComponent –

1

Pour afficher plusieurs fenêtres à la fois, il suffit de les aligner et de les afficher. Après l'exécution de ce code, il devrait y avoir 3 nouvelles fenêtres (vierges) affichées.

void ShowMultiple() 
{ 
    QWidget *win1 = new QWidget(); 
    QWidget *win2 = new QWidget(); 
    QWidget *win3 = new QWidget(); 

    win1->show(); 
    win2->show(); 
    win3->show(); 
} 

Cependant, si vous essayez d'exécuter du code qui prend beaucoup de temps avec l'affichage des fenêtres, les choses peuvent changer. Dans ce cas, vous pouvez regarder les threads ou Qt :: exemples simultanés, en gardant à l'esprit que vous vraiment, vraiment ne peut pas jouer avec l'interface utilisateur dans un autre thread.

Questions connexes