我将尝试使用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()
不让我这样做。我必须放置我的纯对象。
setContextProperty
。就这样。 - BaCaRoZzo