gpt4 book ai didi

c++ - 在层次结构深处访问 QML 信号

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:23:39 25 4
gpt4 key购买 nike

我正在尝试在创建对象完成时发出信号。像这样:

Component.onCompleted: mySignal()

这是在层次结构深处的 QML 文件中。我现在看到两种在 C++ 中访问此信号的解决方案。

首先将信号向上传递到 main.qml,然后在 C++ 中执行此操作:

//Create a Quick View object.
QQuickView *view = new QQuickView();

//Object to access QML properties and childs.
QObject *container = (QObject *) view->rootObject();

//Connect signal and slots
QObject::connect(container, SIGNAL(mySignal()), this, SLOT(onMySignal()));

这个我已经试过了,但由于某种原因,插槽没有被调用。它适用于我从 main.qml 发送和发出的所有其他信号,但不适用于从 Component.onComplete 发出的信号。我可以验证信号是从 QML 端发出的,但从未在 C++ 端接收到。

我尝试的第二件事不是将信号传递给 main.qml,而是获得对发出我想要的信号的 QML 文件的引用。我尝试这样做:

//Create a Quick View object.
QQuickView *view = new QQuickView();

//Object to access QML properties and childs.
QObject *container = (QObject *) view->rootObject();

//Connect signal and slots
QObject::connect(container->findChild<QObject*>("mySignalQmlFile"), SIGNAL(mySignal()), this, SLOT(onMySignal()));

其中 mySignalQmlFile 是其中定义了信号的主矩形的 ID。

我得到了错误:

QObject::connect: ..\GC\mainwindow.cpp:62 中没有这样的信号 QQuickRectangle_QML_54::mySignal()

我现在不确定如何进行。

最佳答案

对于您的第一次尝试,我认为您的信号可能在您连接信号和插槽之前就已发出,因此它永远不会收到信号。

第二次尝试时,您需要使用 qml 文件中的 objectName,而不是“mySignalQmlFile”。

我建议您阅读以下教程。

http://developer.nokia.com/community/wiki/Using_objectName_to_find_QML_elements_from_Qt

此外,在连接信号和插槽之前,需要调用或使用您的 qml 文件。否则,它将无法找到该对象,从而导致同样的错误。

关于c++ - 在层次结构深处访问 QML 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22347120/

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