Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QML和C++;:如何传递导出的C++;对象到导出的C++;上课?_C++_Qt_Qml - Fatal编程技术网

C++ QML和C++;:如何传递导出的C++;对象到导出的C++;上课?

C++ QML和C++;:如何传递导出的C++;对象到导出的C++;上课?,c++,qt,qml,C++,Qt,Qml,我导出了一个C++类和对象,如下所示: int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QtQuick2ApplicationViewer viewer; viewer.setMainQmlFile(QStringLiteral("qml/QQuickViewExample/main.qml")); viewer.showExpanded(); //object e

我导出了一个
C++
类和对象,如下所示:

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QtQuick2ApplicationViewer viewer;
    viewer.setMainQmlFile(QStringLiteral("qml/QQuickViewExample/main.qml"));
    viewer.showExpanded();

    //object export
    ClassA classA(QString stuff);
    QQmlContext* context = viewer.engine()->rootContext();
    context->setContextProperty("_classA", &classA);

    //class export
    qmlRegisterType<ClassB>("CustomComponents", 1, 0, "ClassB");


    return app.exec();
}
intmain(intargc,char*argv[])
{
QGUI应用程序应用程序(argc、argv);
QTQuick2应用程序查看器;
setMainQmlFile(QStringLiteral(“qml/QQuickViewExample/main.qml”);
viewer.showExpanded();
//对象导出
ClassA ClassA(QString stuff);
QQmlContext*context=viewer.engine()->rootContext();
context->setContextProperty(“\u classA”和&classA);
//类导出
qmlRegisterType(“CustomComponents”,1,0,“ClassB”);
返回app.exec();
}

我将创建任意数量的
QML
对象,其中嵌入
ClassB
。我希望每个
ClassB
都有一个指向该程序中存在的1
ClassA
的引用或指针。当我在
QML
对象中初始化
ClassB
时,如何在
QML
中获取
ClassA
的引用,以便
ClassB
可以使用
ClassA

您必须更改操作顺序:

  • 寄存器B

  • 在根上下文上设置一个实例

  • 加载您实例化的源(根据需要多次):

    B{aPtr:_classA}

  • 理由是:

    • 对于SMTH出现在QML源中并用于实例化类,必须首先注册那些类(C++ QML插件也可以这样做)
    • 如果项依赖于上下文属性的存在,则应仅在设置上下文属性后创建它们
    鉴于此,上述步骤(1)和(2)实际上可以互换


    <> P>有一些方法可以用C++从手创建、父和线,我相信,但是这将是一个非常黑暗的艺术的例子(想想从JS表达式手工创建绑定,创建上下文,然后实例化项目…)在野外从未见过:)

    你必须改变行动顺序:

  • 寄存器B

  • 在根上下文上设置一个实例

  • 加载您实例化的源(根据需要多次):

    B{aPtr:_classA}

  • 理由是:

    • 对于SMTH出现在QML源中并用于实例化类,必须首先注册那些类(C++ QML插件也可以这样做)
    • 如果项依赖于上下文属性的存在,则应仅在设置上下文属性后创建它们
    鉴于此,上述步骤(1)和(2)实际上可以互换


    <> P>有一些方法可以用C++从手创建、父和线,我相信,但是这将是一个非常黑暗的艺术的例子(想想从JS表达式手工创建绑定,创建上下文,然后实例化项目…)从未在野外见过:)

    您必须更改操作顺序:1)注册B 2)在根上下文上设置实例C)加载源;在源代码中,实例化B{aPtr:_classA}。就这些:)这把它修好了!如果你把你的评论变成答案,我会给你正确的答案。欢迎:)祝你好运!您必须更改操作顺序:1)注册B 2)在根上下文上设置实例C)加载源;在源代码中,实例化B{aPtr:_classA}。就这些:)这把它修好了!如果你把你的评论变成答案,我会给你正确的答案。欢迎:)祝你好运!是否可以将aPtr定义为ClassB中的const?我尝试过这样做,但我得到了构建错误。我想在ClassB里面有一个ClassA的常量指针,这样ClassB就不会弄乱任何东西了@trianta2如果为了这个目的首先创建了一个ClassA的单例实例,我想是的。有可能将aPtr定义为ClassB内部的const吗?我尝试过这样做,但我得到了构建错误。我想在ClassB里面有一个ClassA的常量指针,这样ClassB就不会弄乱任何东西了@trianta2如果首先为此目的创建ClassA的单例实例,我认为是的。