gpt4 book ai didi

c++ - 如何将单例传递给qt中的另一个类

转载 作者:行者123 更新时间:2023-11-28 04:24:56 25 4
gpt4 key购买 nike

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 的方法作为论据。至少它在 void loadLanguage(QString language, QObject*(QQmlEngine*,QJSEngine*) objDataloop); 中给出了错误关于 qmlTranslator 定义。

来自公众: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;
}

最佳答案

DataloopWrapper::qmlInstance 是一个函数,您需要调用 以获得指向QObject< 的指针.

对于任何你想传递这个对象的函数,你需要让它接受一个指向QObject(类型QObject*)的指针,并且不要忘记调用 DataloopWrapper::qmlInstance


翻译成代码:

class QmlTranslator : public QObject
{
...
void loadLanguage(QString language, QObject* objDataloop);
...
};

...

qmlTranslator.loadLanguage(lang, DataloopWrapper::qmlInstance(aQMLEngineObjectPointer, aQJSEnginePointer));

关于c++ - 如何将单例传递给qt中的另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54570584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com