QVariant de QObject*
J'essaie de joindre un pointeur vers un QListWidgetItem
, pour être utilisé dans la fente itemActivated
.
Le pointeur j'essaie de joindre est un QObject*
descendant, donc, mon code ressemble à ça:
Image * im = new Image();
//here I add data to my Image object
//now I create my item
QListWidgetItem * lst1 = new QListWidgetItem(*icon, serie->getSeriesInstanceUID(), m_iconView);
//then I set my instance to a QVariant
QVariant v(QMetaType::QObjectStar, &im)
//now I "attach" the variant to the item.
lst1->setData(Qt::UserRole, v);
//After this, I connect the SIGNAL and SLOT
...
Maintenant, mon problème, le itemActivated
logement. Ici, j'ai besoin d'extraire mon Image*
de la variante, et je ne sais pas comment.
J'ai essayé ceci, mais j'obtiens l'erreur:
‘qt_metatype_id " n'est pas un membre de ‘QMetaTypeId’
void MainWindow::itemActivated( QListWidgetItem * item )
{
Image * im = item->data(Qt::UserRole).value<Image *>();
qDebug( im->getImage().toAscii() );
}
Tout soupçon?
Image * im = item->data(Qt::UserRole).value<Image *>();
À partir de la
Notez également que le type de
QVariant(int typeId, const void *copy)
ctor de la documentation: "d'Habitude, vous n'aurez jamais à utiliser ce constructeur, l'utilisation QVariant::fromValue() au lieu de construire des variantes du type pointeur représenté par QMetaType::étoile du néant, et QMetaType::QObjectStar."Notez également que le type de
&im
est Image**
, pas Image*
.OriginalL'auteur Leonardo M. Ramé | 2010-10-08
Vous devez vous connecter pour publier un commentaire.
La réponse est ce
Pourquoi n'utilisez-vous pas le
qvariant_cast
directement jeté àmyClass*
? Comme ceci:myClass * lmyClass = qvariant_cast<myClass *>(item-data(Qt::UserRole));
?Tant pis: à la Recherche à la mise en œuvre de
qvariant_cast
m'a dit pourquoi: le paramètre de type de qvariant_cast doit (devrait?) être connu pour le meta-object system.OriginalL'auteur Leonardo M. Ramé
Qui ressemble à une utilisation inhabituelle de
QVariant
. Je ne suis même pas sûr siQVariant
serait en charge de la tenue d'uneQObject
ouQObject*
de cette façon. Au lieu de cela, je voudrais essayer de dériver deQListWidgetItem
afin d'ajouter des données, quelque chose comme ceci:Plus, le destructeur de cette nouvelle classe vous donne quelque part logique assurez-vous que votre
Image
obtient nettoyé.Désolé aschepler, cela ne fonctionne pas. Les SIGNAUX ne sont pas émis, comment puis-je résoudre ce problème?
OriginalL'auteur aschepler
Vous avez inséré votre Image classe QObject *, afin de le sortir comme QObject * aussi. Puis effectuer qobject_cast et tout devrait bien se passer
OriginalL'auteur Kamil Klimek