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

QVariant::QVariant(void*) is private

我正在尝试使用 setProperty(); 将 C++ object 公开给 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");
}

在main.cpp

中的用法
QQmlApplicationEngine engine;
MyClass mc;

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

在main.qml

中的使用
onClicked: mc.captureIt()

当我尝试编译时发生了一些错误,因为关于 QVariant(问题标题中提到的那个)存在奇怪的错误。

你有什么办法解决这个问题吗?

更新 这与 ringo 在下面的评论中发布的内容不同。问题不在于我无法将 class 转换为 QVariant。我可以。 但问题是 setProperty() 不让我做。我必须把我的 object 放在那里。

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

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