我正试图使用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
(问题标题中提到的那个)出现了奇怪的错误。
你知道我该怎么解决吗?
更新这不是林戈在下面评论中发布的内容的重复。问题不在于我不能将我的类转换为QVariant
。我可以但问题是setProperty()
不允许我这么做。我必须把我的纯对象放在那里。
您需要使用QVariant::fromValue
从指针创建QVariant:
engine.rootContext()->setProperty("myclass", QVariant::fromValue(&mc));