gpt4 book ai didi

qt - 将参数从 C++ 传递到 QML

转载 作者:行者123 更新时间:2023-12-03 19:37:54 30 4
gpt4 key购买 nike

我想将一些参数从 C++ 传递给 QML,以便 QML 可以对它们做一些事情。

有点像这样:

void MyClass::myCplusplusFunction(int i, int j)
{
emit mySignal(i, j);
}

在 QML 中,每次都是 mySignal(i, j)发出了,我想调用一个 QML 函数并用 i 做一些事情和 j .
Connections {
target: myClass
// mySignal(i, j) is emitted, call myQmlFunction(i,j)
}

我该怎么做?

最佳答案

假设您在 cpp 端有一个信号:

void yourSignal(int i, QString t)

您有两个选择:
  • 将您的类注册为 qml 类型并将其用作 qml 对象。该对象将从 QML 端初始化。 reference :
    qmlRegisterType<ClassNameCPP>("com.mycompany.qmlName", 1, 0, "ClassNameQml");

  • 然后,在qml中:
    import QtQuick 2.9
    import com.mycompany.qmlName 1.0

    Item{
    ClassNameQml{
    id: myQmlClass
    onYourSignal: {
    console.log(i,t); // Do whatever in qml side
    }
    }
    }
  • 将您的类添加为 qml 变量。当您需要多次重复使用您的对象时,此选项是首选。 reference :
    view.rootContext()->setContextProperty("varName", &cppObject);

  • 然后,在qml中:
    import QtQuick 2.9
    Item{
    Connections{
    target: varName
    // In QML for each signal you have a handler in the form "onSignalName"
    onYourSignal:{
    // the arguments passed are implicitly available, named as defined in the signal
    // If you don't know the names, you can access them with "arguments[index]"
    console.log(i,t); // Do whatever in qml side
    }
    }
    }

    关于qt - 将参数从 C++ 传递到 QML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45716708/

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