当前位置:  开发笔记 > 编程语言 > 正文

QVariant :: QVariant(void*)是私有的

如何解决《QVariant::QVariant(void*)是私有的》经验,为你挑选了1个好方法。

我正在尝试使用CML公开C++对象setProperty();.这是我的代码的原型:

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()并不让我去做.我必须把我那个简单的物体放在那里.



1> steveire..:

您需要使用QVariant::fromValue从指针创建QVariant:

engine.rootContext()->setProperty("myclass", QVariant::fromValue(&mc));

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有