Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] interface dans un thread séparé ?

    13 juin 2008 à 0:23:15

    Je suis en train de développé une librairie graphique basée sur Qt, et j'aimerai que les objets puissent etre lancé dans un thread séparé. J'ai donc les classes suivantes :
    class ebbox : public QGroupBox {...}
    
    class gui_thread: public QThread
    {
    	
    public:
    	gui_thread(ebbox* argbox);
    	~gui_thread(){delete box;};
    	
    	void run();
    	
    private:
    	ebbox* box;
    };
    


    et les fonctions suivantes :
    gui_thread::gui_thread(ebbox* argbox):
    	box(argbox)
    	{}
    
    void gui_thread::run()
    {
    	box->show();
    	start();
    }
    


    enfin, mon main :
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    	Idx<ubyte> left(1, 1);
    	CPPUNIT_ASSERT(load_matrix<ubyte>(left, "data/norb/plane_left.mat") == true);
    	
    	const char* title = "Idx test";
    	Idx_Gui* test = new Idx_Gui((void*)&left, UBYTE, title, 0);
    	gui_thread* thread_test = new gui_thread(test);
    	thread_test->run();
    
    	sleep(10);
    	for(int i=0; i < 50; i++)
    		for(int j=0; j<50; j++)
    			left.set(255, i, j);
    	
    	test->refreshdisplay();
    	
        return a.exec();
    }
    


    Or rien ne s'affiche tant que les 10 secondes ne sont pas écoulées (donc tant que "return a.exec" n'a pas été atteint).
    Ai-je une faute dans mon code ?
    Est-ce possible de mettre l'interface graphique dans un thread séparé et pas le thread de calcul, ou faut-il aussi mettre le thread de calcul dans un autre thread que le principal ? (auquel cas plus besoin de mettre l'interface dans un thread à part, le thread principal suffirait...)
    Toute aide est la bienvenue et merci d'avance :-)
    • Partager sur Facebook
    • Partager sur Twitter
      13 juin 2008 à 1:22:22

      Citation : xenosender

      Or rien ne s'affiche tant que les 10 secondes ne sont pas écoulées (donc tant que "return a.exec" n'a pas été atteint).
      Ai-je une faute dans mon code ?


      tout simplement ceci :
      sleep(10);
      
      • Partager sur Facebook
      • Partager sur Twitter
        13 juin 2008 à 1:28:18

        Oui mais le sleep devrait endormir le thread principal, pas celui de l'interface graphique, non ?
        Si je le remplace par :
        une_fonction_qui_calcule_beaucoup_et_longtemps();
        


        l'interface ne se lancera toujours pas avant la fin, si ?
        Moi je cherche à lancer le GUI tout de suite, en utilisant le thread principal pour raffraichir le GUI regulierement...
        • Partager sur Facebook
        • Partager sur Twitter
          13 juin 2008 à 2:04:40

          Citation : xenosender

          Oui mais le sleep devrait endormir le thread principal, pas celui de l'interface graphique, non ?


          le thread de la GUI, c'est app.exec (qui est une fonction bloquante, ou plutôt la boucle principale).
          il faudrait que tu crées une classe dérivé de QThread et que tu essayes en mettant une variable de ce type en temps que membre de ta classe de fenêtre.
          • Partager sur Facebook
          • Partager sur Twitter

          [Qt] interface dans un thread séparé ?

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown