将参数从C ++传递到QML

时间:2017-08-16 14:45:52

标签: qt qml qtquick2 qt-signals

我想将一些参数从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)
}

我将如何做到这一点?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

让我们说你在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
        }
    }
}