【发布时间】:2015-12-12 13:15:00
【问题描述】:
我正在尝试使用 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 在下面的 cmets 中发布的内容的副本。问题不在于我无法将我的课程转换为QVariant。我可以。 但问题是 setProperty() 不允许我这样做。我必须把我完全简单的对象放在那里。
【问题讨论】:
-
@ringø,你能解释一下这与我所问的重复吗?
-
请把问题读到底部,同样的问题。然后阅读可能对您有帮助的答案...
-
@ringø,我已经更新了我的问题
-
您应该使用
setContextProperty。就是这样。