2010-04-07 1 views
7

J'ai une classe comme ce
comment puis-je hériter à la fois de QWidget et de QThread?

class GUI : public QWidget, public QThread 

Quand je fais ce qui précède je reçois des erreurs sur les signaux de connexion. The error says Reference to "connect" is ambiguous. Y a-t-il un moyen d'hériter des deux?

Merci

+5

Veuillez expliquer pourquoi vous voulez faire cela. Puisque cela ne peut pas être fait (voir les réponses), nous aimerions savoir quelles sont les choses que * va * vous suggérer. Cela nécessite plus d'informations. –

+0

mon programme reçoit des messages d'un autre ordinateur via firewire. Les messages reçus sont dirigés vers un fichier à partir duquel l'interface graphique les lit. Je veux gérer les messages firewire dans un thread, et l'interface graphique dans un autre thread. – infinitloop

Répondre

11

Vous ne pouvez pas. Les deux QWidget et QThread héritent (non virtuellement) de QObject. Vous n'avez donc pas de dérivation virtuelle, donc deux copies de QObject, ce qui perturbe le compilateur. QObject a été conçu spécifiquement de cette façon. Voir:

Il y a des gens qui se seraient autour de ce (ne peut pas trouver le lien en ce moment, mais il est là-bas sur Google, j'ai eu le même problème deux il y a quelques semaines), mais c'est dangereux au mieux. Editer: le meilleur moyen serait probablement d'avoir un autre objet hérité de QThread et de garder cet objet en tant que membre de votre classe GUI. C'est le genre de solution de contournement que la plupart des gens font dans ce domaine.

-1

Vous ne pouvez pas hériter de plusieurs QObjects.

Vous pouvez hériter de l'un et faire de l'autre une variable membre et travailler à partir de là.

class GUI : public QWidget 
{ 
    QThread myThread; 
}; 

Vous avez nommé votre interface graphique de classe - est-ce l'interface graphique principale de votre programme? Voir les exemples dans le dossier des exemples Qt - ils ont des exemples de programmes sur les deux GUI's et Threads.

+2

Seul le thread principal peut fonctionner sur des widgets, ce qui rend un widget membre d'un thread semble étrange. Qu'est-ce que cela pourrait accomplir? –

+0

oups, je ne le savais pas. – Will

+3

"vous devriez hériter de QMainWindow" est faux, vous ne devriez le faire que si vous voulez réellement certaines des fonctionnalités fournies par QMainWindow. Tout QWidget sans parent est automatiquement une fenêtre. – rohanpm

0

QWidgets et les objets liés à l'interface graphique ne doivent pas être dans des threads différents de ceux du thread principal de l'application. Vous ne devriez pas hériter des deux. Vous ne pouvez pas également appeler la fonction moveToThread() d'un widget.

Questions connexes