QML 无法识别 C++ 函数

QML is not recognising C++ functions

我正在尝试将我的 c++ class 实现到 QML 中,通过设置上下文 属性 可以识别 class 并且我可以成功调用 class 并查看所有功能,但在运行时它们都无法识别并且 returns 错误: TypeError: 属性 'getSrcImage' of object Wrapper(0x7b211cbf10) is not a function,我相信这些函数没有正确声明到 QML 但不知道如何修复..

.h 文件

class Wrapper : public QObject
{
    Q_OBJECT
    Q_INVOKABLE void initiateLipLib();
    Q_INVOKABLE bool setMat();
    Q_INVOKABLE QImage displayfeed();
    Q_INVOKABLE void getMatFeed();
    Q_INVOKABLE int liptrainstart(cv::Mat Image);
    Q_INVOKABLE void liptrainingend();
    Q_INVOKABLE float getDistance();
    Q_INVOKABLE std::string getstatus();
    Q_INVOKABLE void clear();
public:
    explicit Wrapper(QObject *parent = 0);
    QString getSrcImage();

main.cpp

#include <QApplication>
#include <QQmlApplicationEngine>
#include <QQuickView>
#include <QtQml/QQmlContext>
#include <QDebug>
#include "wrapper.h"



int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QQmlApplicationEngine engine;
    engine.rootContext()->setContextProperty("wrapper", new Wrapper);
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}

.qml

Image {
            id: camfeed
            visible: false
            source: wrapper.getstatus()
            anchors.centerIn: camcontainer
}

你的 Q_INVOKABLE 函数需要 public 在你的包装器对象中,我希望你知道如果没有设置为 public,它们是 private

尝试将它们切换为 public 重试。

class Wrapper : public QObject
{
    Q_OBJECT
public:
    Q_INVOKABLE void initiateLipLib();
    Q_INVOKABLE bool setMat();
    Q_INVOKABLE QImage displayfeed();
    Q_INVOKABLE void getMatFeed();
    Q_INVOKABLE int liptrainstart(cv::Mat Image);
    Q_INVOKABLE void liptrainingend();
    Q_INVOKABLE float getDistance();
    Q_INVOKABLE std::string getstatus();
    Q_INVOKABLE void clear();

    explicit Wrapper(QObject *parent = 0);
    QString getSrcImage();

解决方案是将 Q_INVOKABLE 更改为 Q_PROPERTY,在 public 中定义函数,然后在我的 qml 中调用它们。所有功能似乎都正常工作并返回正确的值。