如何在qt

时间:2019-02-07 09:54:02

标签: c++ qt

main.cpp中,我正在创建一个单例类型的类,以通过以下功能在qml中使用它:

qmlRegisterSingletonType<DataloopWrapper>("com.xpto.connector", 1, 0, "DataloopWrapper",&DataloopWrapper::qmlInstance);

我在main.cpp上调用了另一个对象的函数,我想从那个singleton调用函数

也许可以这样qmlTranslator.loadLanguage(lang, DataloopWrapper::qmlInstance);吗?

我要通过以下方式声明QmlTranslator类:

#ifndef QMLTRANSLATOR_H
#define QMLTRANSLATOR_H

#include <QObject>
#include <QTranslator>
#include <QQmlEngine>
#include <QGuiApplication>

class QmlTranslator : public QObject
{
    Q_OBJECT

public:
    QmlTranslator(QQmlEngine *engine, QGuiApplication *app);
    Q_INVOKABLE void selectLanguage(QString language);
    void InstallTranslator();
    void loadLanguage(QString language, QObject*(QQmlEngine*,QJSEngine*) objDataloop);
    virtual ~QmlTranslator();
signals:
    void languageChanged();

private:
    QTranslator *_translator;
    QQmlEngine *_engine;
    QGuiApplication *_app;
};


#endif // QMLTRANSLATOR_H

我没有找到传递DataloopWrapper::qmlInstance作为参数的方法。至少它在qmlTranslator定义的void loadLanguage(QString language, QObject*(QQmlEngine*,QJSEngine*) objDataloop);中给出了错误。

在公开场合:DataloopWrapper i的成员拥有qmlInstance的定义,就是这样:

class DataloopWrapper : public QObject, public something::DataloopCBHandler,
                        public something::DataloopTransferCBHandler
{
    Q_OBJECT
public:
    explicit DataloopWrapper(QObject *parent = nullptr);
    virtual ~DataloopWrapper();
    static QObject *qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine)
    {
        Q_UNUSED(engine);
        Q_UNUSED(scriptEngine);

        return new DataloopWrapper;
    }

1 个答案:

答案 0 :(得分:1)

Request(response.urljoin(url), ...)函数,您需要调用以获得指向DataloopWrapper::qmlInstance的指针。

对于要传递此对象的任何函数,都需要使其接受指向QObject(类型为QObject)的指针,并且不要忘记调用 QObject*


翻译成代码:

DataloopWrapper::qmlInstance