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

QVariant::QVariant(void*) is private

本文关键字:QVariant void      更新时间:2023-10-16

我正试图使用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));