Qml QVariant::QVariant(void*)是私有的

Qml QVariant::QVariant(void*)是私有的,qml,qt5,qtquick2,qobject,Qml,Qt5,Qtquick2,Qobject,我试图用 SET属性()来将C++对象暴露给QML;。以下是我的代码原型: MyClass.h class MyClass::public QObject { Q_OBJECT public: explicit MyClass(QObject *parent = 0); ~MyClass(); private: QScreen *screen; QPixmap myPixmap; }; MyClass.cpp MyClass::MyClass (QO

我试图用<代码> SET属性()来将C++对象暴露给QML;<代码>。以下是我的代码原型:

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");
}
QQmlApplicationEngine engine;
MyClass mc;

engine.rootContext()->setProperty("myclass", &mc);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
main.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");
}
QQmlApplicationEngine engine;
MyClass mc;

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

onClicked: mc.captureIt()
当我试图编译一些错误时,会发生,因为关于
QVariant
(问题标题中提到的那个)有一个奇怪的错误

你有什么想法吗?我怎么解决这个问题

更新
这不是ringo在下面评论中发布的内容的重复。问题不是我不能将我的类转换为
QVariant
。我可以但问题是
setProperty()
不允许我这样做。我必须将我的纯对象放在那里。

您需要使用
QVariant::fromValue
从指针创建QVariant:

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

@ringø可能重复,你能解释一下这是怎么重复我所问的吗?请把问题读到底,同样的问题。然后阅读可能对您有帮助的答案…@ringø,我已经更新了我的问题您应该使用的
setContextProperty
。就这样。