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

5

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

2
可能重复的问题:使用QListWidgetItem :: setData存储指针 - Déjà vu
@ringø,你能解释一下这个与我所问的重复吗? - pushandpop
请仔细阅读问题直到底部,可能会有帮助的答案。 - Déjà vu
@ringø,我已经更新了我的问题。 - pushandpop
1
你应该使用 setContextProperty。就这样。 - BaCaRoZzo
显示剩余2条评论
1个回答

8

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接