QVariant::QVariant(void*) 是私有的
QVariant::QVariant(void*) is private
我正在尝试使用 setProperty();
将 C++ object 公开给 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 在下面的评论中发布的内容不同。问题不在于我无法将 class 转换为 QVariant
。我可以。 但问题是 setProperty()
不让我做。我必须把我的 object 放在那里。
您需要使用 QVariant::fromValue
从指针创建 QVariant:
engine.rootContext()->setProperty("myclass", QVariant::fromValue(&mc));
我正在尝试使用 setProperty();
将 C++ object 公开给 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 在下面的评论中发布的内容不同。问题不在于我无法将 class 转换为 QVariant
。我可以。 但问题是 setProperty()
不让我做。我必须把我的 object 放在那里。
您需要使用 QVariant::fromValue
从指针创建 QVariant:
engine.rootContext()->setProperty("myclass", QVariant::fromValue(&mc));