【问题标题】:Qml C++ Find ChildQml C++ 查找孩子
【发布时间】:2012-05-19 19:48:26
【问题描述】:

我有一个 main.qml,其中插入了一个 MainPage.qml:

initialPage: MainPage {tools: toolBarLayout}

因为我选择为 Symbian 制作它。当我尝试时:

QObject *mainPage = rootObject->findChild<QObject*>("MainPage");
if (mainPage)
    QDeclarativeProperty(mainPage, "toets").write(3);

消息没有通过,但没有错误,我也尝试使用“if (mainPage)”将信号连接到 MainPage 上的 SLOT,但它也没有响应。虽然我已经设法通过 main 获得信号,但是当我尝试时:

function changeNum(num)
{
     MainPage.changeNum(num)
}

该函数永远不会被执行,因为我根本没有从 console.log 收到消息,这与我在 main 上的函数运行时所做的不同。我也知道其他方法不起作用,因为它们也没有记录消息或执行它们的其余功能。

我认为问题可能在于 MainPage 没有被创建为具有 id 的元素。你知道是什么原因造成的吗?

【问题讨论】:

    标签: c++ qt qml signals-slots


    【解决方案1】:

    findChild 不查找 id 而是查找 objectName 属性,您可以简单地将其添加到 MainPage 对象中(参见 documentation):

    initialPage: MainPage {
        objectName: "MainPage"      
        tools: toolBarLayout
    }
    

    您还可以通过rootObjectinitialPage 属性访问该对象,而无需添加objectName 属性:

    QObject * mainPage = QDeclarativeProperty(rootObject, "initialPage").object();
    if (mainPage)
         QDeclarativeProperty(mainPage, "toets").write(3);
    

    【讨论】:

    • 谢谢,我以为它在寻找 id,在我添加对象名后一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    相关资源
    最近更新 更多