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

时间:2015-12-12 13:15:01

标签: qml qt5 qtquick2 qobject

我正在尝试使用setProperty();将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");
}

在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在下面的评论中发布的内容并不重复。问题不在于我无法将班级转换为QVariant。我可以。 但问题是 setProperty()不允许我这样做。我必须把我那个简单的物体放在那里。

1 个答案:

答案 0 :(得分:5)

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

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