2015-12-12 1 views
0

J'essaie d'exposer l'objet C++ à QML en utilisant setProperty();. Voici un prototype de mon code:QVariant :: QVariant (void *) est privé

MyClass.h

class MyClass::public QObject 
{ 
    Q_OBJECT 

public: 
    explicit MyClass(QObject *parent = 0); 
    ~MyClass(); 

private: 
    QScreen *screen; 
    QPixmap myPixmap; 
}; 

MyClass.cpp

MyClass::MyClass (QObject *parent) : QObject(parent) 
{ 
    screen = QGuiApplication::primaryScreen(); 
} 

MyClass::~MyClass() 
{ 

} 

void MyClass::captureIt() 
{ 
    myPixmap = screen->grabWindow(0); 
    myPixmap.save("/home/john/Pictures/screen.png"); 
} 

d'utilisation dans main.cpp

QQmlApplicationEngine engine; 
MyClass mc; 

engine.rootContext()->setProperty("myclass", &mc); 
engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); 

utilisation dans main.qml

onClicked: mc.captureIt() 

Quand je tente de compiler quelque chose de mal arrive, parce qu'il ya erreur d'étrange QVariant (celui mentionné dans le titre de la question).

Avez-vous l'intention de résoudre ce problème?

Mise à jour Ce n'est pas une copie de ce que Ringo a posté dans les commentaires ci-dessous. Le problème n'est pas que je ne peux pas convertir ma classe en QVariant. Je peux. Mais le problème est que setProperty() ne me laisse pas le faire. Je dois y mettre mon objet parfaitement uni.

+2

double possible de [Stockages pointeurs en utilisant QListWidgetItem :: setData] (http://stackoverflow.com/questions/9248001/storing- pointers-using-qlistwidgetitemsetdata) –

+0

@ ringø, pouvez-vous expliquer comment est-ce le double de ce que j'ai demandé? – pushandpop

+0

S'il vous plaît lire la question jusqu'au fond, même problème. Alors lisez la réponse qui peut vous aider ... –

Répondre

3

Vous devez utiliser QVariant::fromValue pour créer un QVariant d'un pointeur:

engine.rootContext()->setProperty("myclass", QVariant::fromValue(&mc));