我正在尝试使用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()
不允许我这样做。我必须把我那个简单的物体放在那里。
答案 0 :(得分:5)
您需要使用QVariant::fromValue
从指针创建QVariant:
engine.rootContext()->setProperty("myclass", QVariant::fromValue(&mc));