Bonjour la communauté,
J'ai un problème aléatoire avec QThread...
Je pense que je n'ai pas bien défini mon thread.
Si j'effectue mes opérations "trop rapidement" (du moins c'est ce qui semble être le problème...), ou que je clique deux fois trop rapidement sur le bouton une fois que celui-ci revient actif, l'erreur suivante sort :
Environnement : Ubuntu 9.10, QT4, Q Designer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 QObject::setParent: Cannot set parent, new parent is in a different thread QPixmap: It is not safe to use pixmaps outside the GUI thread <unknown>: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0.
Le .h
Le .cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 class ThreadConnectForum : public QThread { public: ThreadConnectForum(MaClasseAppelante* parent = 0); void run(); private: MaClasseAppelante* fenetre; };
Une bouton depuis "on_buttonBox_accepted" de ma classe MaClasseAppelante (basée sur un QDialog) par exemple lance le thread, de la manière suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 ThreadConnectForum::ThreadConnectForum(MaClasseAppelante* parent) : QThread(parent) { this->fenetre = parent; } void ThreadConnectForum::run() { fenetre->buttonBox->setDisabled(false); exec() }
Parfois ça marche, parfois ça affiche l'erreur :s
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 void MaClasseAppelante::on_buttonBox_accepted() { buttonBox->setDisabled(true); ThreadConnectForum* t = new ThreadConnectForum(this); t->start(); }
Quel est le souci ?
Ce qui est bizarre c'est que c'est que je n'ai que ce thread et qu'un seul thread a la fois à chaque fois...
J'ai ma classe principale, MaClasseAppelante, et celle-ci lance le thread en bloquant tout les boutons avant de le lancer, et le thread lui-même réactive les bouton une fois qu'il se termine.
Je n'ai aucun autre thread, toujours qu'un seul thread.
Et aussi j'ai aucune idée de ce qu'est un Pixmap.
Une idée au problème ?
Edit : Quel est l'intérêt d'un QThread d'ailleurs ? Un Thread simple serait pas mieux ? (j'y connais rien en threads C++... j'ai pris le QThread vu que j'utilise cette librairie pour l'interface graphique mais bon...)
Partager