我正在尝试使用CML公开C++对象setProperty();
.这是我的代码的原型:
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()
并不让我去做.我必须把我那个简单的物体放在那里.
您需要使用QVariant::fromValue
从指针创建QVariant:
engine.rootContext()->setProperty("myclass", QVariant::fromValue(&mc));