Comment utiliser les SIGNAUX et de slots sans dérivation à partir de QObject?
OU de l'autre façon de formuler ma question (même si elle ne résout pas mon problème): 'QObject::QObject' ne peut pas accéder privé membre déclarée dans la classe QObject'
J'ai besoin de Signaux et les SLOTS de la fonctionnalité dans ma classe, mais je suppose qu'il n'est pas possible sans tirer de QObject
?
class MyClass
{
signals:
importantSignal();
public slots:
importantSlot();
};
Le Problème semble être que j'ai besoin de tirer à partir des QObject
d'utiliser les signaux et les slots ... mais j'ai besoin de la valeur par défaut constructeur de MyClass
. Mais je ne peux pas construire en raison de la fonctionnalité suivante de QObject
:
Pas de Constructeur de Copie ou de l'Opérateur d'Affectation.
J'ai essayé beaucoup de choses ...
Donc mon shoul Classe ressembler à ça:
#include <QObject>
class MyClass: public QObject
{
Q_OBJECT
public:
explicit MyClass(QObject *parent = 0); //autogenerated by qtcreator for QObject derived class
MyClass(const MyClass * other);
signals:
importantSignal();
public slots:
importantSlot();
};
J'ai besoin de la valeur par défaut constructeur de MyClass
.
Donc est-il possible, évitez la "'QObject::QObject' ne peut pas accéder privé membre déclarée dans la classe QObject'" erreur?
Ou comme alternative, est-il possible d'utiliser les signaux et les slots sans QObject
?
Je suis content pour tous les conseils.
j'utilise cette classe comme dataholder, au lieu d'une struc... - chaque entité comme un tupel. et le point pourquoi j'essaie de dérivée de QObject, c'est que je veux utiliser les signaux et les slots pour le chargement webcontent (photos)...
et je tiens également à stocker les instances de l'auto-écrit countainer/cluster. ? j'ai besoin de le constructeur par défaut pour geting les instances vides.
mh... j'ai exactement utiliser ma classe pour le stockage de valeurs et, par exemple, une image chargée à partir du web. l'image, par exemple, est tracée sur une carte (à l'aide de marblewidget).
OriginalL'auteur 6e69636b6e616d65 | 2011-09-21
Vous devez vous connecter pour publier un commentaire.
Si vous voulez un copiable objet avec
QObject
fonctionnalités dont vous avez besoin de l'adhésion (par pointeur) plutôt que de l'héritage.Vous pouvez dériver une classe
Handler
deQObject
oùHandler
'fentes appelSomeInterface
fonctions virtuelles sur son parent.OriginalL'auteur spraff
Si vous souhaitez mettre en œuvre event-driven fonctionnalités à l'aide d'un des signaux/slots modèle, mais je ne veux pas travailler à l'intérieur des limites de l'intervalle Qt (c'est à dire, vous voulez utiliser votre classe à l'intérieur de conteneurs STL, etc. qui nécessitent copier-constructeurs), je conseille Boost::signal.
Sinon, non, tu ne peux pas faire ce que vous êtes désireux sans dérivation à partir de
QObject
depuis que la classe de base est que les poignées de l'intervalle Qt exécution des signaux/slots de la fonctionnalité.donc, il y a un moyen d'éviter que "la" QObject::QObject' ne peut pas accéder privé membre déclarée dans la classe QObject'"erreur"?
Oui ... ne pas faire quelque chose qui nécessite un constructeur par copie ou de l'opérateur d'affectation. Cela signifie qu'il est souvent un bon choix pour travailler avec des objets dérivés de
QObject
par le biais de pointeurs plutôt que des instances qui peuvent avoir besoin de la copie pour vous déplacer. Ce n'est pas que vous ne pouvez pas utiliser les instances, mais vous ne pouvez pas les copier, et, par conséquent, vous aussi ne peut pas les coller dans des conteneurs STL, etc.OriginalL'auteur Jason
Vous ne pouvez pas utiliser Qt signal/slot mécanismes sans l'aide de
QObject
/Q_OBJECT
.Vous pourrait théoriquement créer un mannequin de QObject et de composer dans votre classe. Le mannequin serait alors en avant de la fente d'appels à votre classe. Vous aurez probablement courir dans les problèmes de gestion de durée de vie, pour les raisons que Liz a décrit dans son commentaire.
OriginalL'auteur Tom Kerr
Depuis Qt5 vous pouvez simplement vous connecter à n'importe quelle fonction
OriginalL'auteur ManuelSchneid3r
Dans Qt5, vous utilisez
QObject::connect
connectersignal
avecslot
:Le résultat:
OriginalL'auteur Silencer 金