Qml QVariant::QVariant(void*)是私有的
我试图用<代码> SET属性()来将C++对象暴露给QML;<代码>。以下是我的代码原型: MyClass.hQml QVariant::QVariant(void*)是私有的,qml,qt5,qtquick2,qobject,Qml,Qt5,Qtquick2,Qobject,我试图用 SET属性()来将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 (QO
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");
}
QQmlApplicationEngine engine;
MyClass mc;
engine.rootContext()->setProperty("myclass", &mc);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
main.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");
}
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));
@ringø可能重复,你能解释一下这是怎么重复我所问的吗?请把问题读到底,同样的问题。然后阅读可能对您有帮助的答案…@ringø,我已经更新了我的问题您应该使用的
setContextProperty
。就这样。