Bonjour,
Je n'arrive pas à créer de composants Qt dans une DLL.
Mon programme principal est un code C++ non Qt, qui charge une dll personnelle.
Dans celle ci, je crée un QPushButton. Alors déjà pour le créer il faut simuler un QApplication :
Tout ça dans une unique fonction exportée, ça fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int argc = 1; char** argv = NULL; QApplication a(argc, argv); QPushButton widget("Push Button");
Mais, une fois qu'on veut faire plus évolué, c'est la galère : j'ai créé 3 fonctions exportées dans le dll : createWidget, setSizeToWidget, getWidgetRender.
Pour palier au problème de persistance du widget créé entre appels successifs des fonctions, j'ai mis un QPushButton en variable globale (juste pour tester avant de faire une liste de widgets si cela fonctionnait)
Voilà que je lance mon programme...et au moment de créer l'objet il plante :*
Alors, là j'ai lu plusieurs forums, mais à chaque fois la résolution c'est "finalement j'ai tout laissé dans un unique thread"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ASSERT failure in QWidget: "Widgets must be created in the GUI thread.", file kernel\qwidget.cpp, line 1069
Moi je n'ai pas de threads, je n'ai qu'une pauvre dll qui crée un QPushButton et renvoi son rendu !
j'ai trouvé ça comme info : http://www.qtforum.org/article/22708...-instance.html mais je ne comprends rien, ça me semble trop complexe pour peu de choses...
J'avais essayé aussi de mettre le QApplication en variable globale mais pareil ça fait des horreurs de compilation
Je pense que le programme principal crée un thread, et que la dll qui crée le QPushButton le fait dans un autre thread ce qui fait le problème, à mon avis.
Comment palier à ce problème de thread SVP ?
Partager