将参数从 C++ 传递到 QML

Passing parameters from C++ to QML

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

有点像这样:

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

在 QML 中,每次发出 mySignal(i, j) 时,我都想调用一个 QML 函数并用 ij 做一些事情。

Connections {
    target: myClass
    // mySignal(i, j) is emitted, call myQmlFunction(i,j)
}

我该怎么做?

您可以在此处找到完整的文档:

http://doc.qt.io/qt-4.8/qtbinding.html

假设您在 cpp 端有信号:

void yourSignal(int i, QString t)

您有两个选择:

  • 将您的 class 注册为 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
        }
    }
}
  • 将您的 class 添加为 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
        }
    }
}