在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的成员们,我为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;
}发布于 2019-02-07 19:14:38
DataloopWrapper::qmlInstance是一个函数,您需要调用它才能获得指向QObject的指针。
对于您想要传递此对象的任何函数,您需要让它接受指向QObject (类型为QObject*)的指针,并且不要忘记调用DataloopWrapper::qmlInstance。
翻译成代码:
class QmlTranslator : public QObject
{
...
void loadLanguage(QString language, QObject* objDataloop);
...
};
...
qmlTranslator.loadLanguage(lang, DataloopWrapper::qmlInstance(aQMLEngineObjectPointer, aQJSEnginePointer));https://stackoverflow.com/questions/54570584
复制相似问题