如何将信号/槽中的数据从一个QObject传递到qml中的另一个QQuickItem对象?

时间:2016-02-23 09:10:30

标签: c++ qt signals-slots qtquick2

我有一个这样的课程:

class WaveItem:public QQuickItem
{
    Q_OBJECT
public:
    WaveItem(QQuickItem *parent = 0);

public slots:
    void  setSamples(short *buff,int len);

protected:
    QSGNode * updatePaintNode(QSGNode *node, UpdatePaintNodeData *data);
};

另一个是:

{{1}}

我需要在qml中使用signal(dataReady)/ slot(setSamples)连接此类。怎么可能?

1 个答案:

答案 0 :(得分:0)

如果您查看有关exposing signals的qt文档,则说明非常好。

首先,您需要将QObject派生类register发送到QML引擎。

qmlRegisterType<Myclass>("MyclassLib", 1, 0, "Myclass");

这样,您可以在QML中创建Myclass个对象。 但是如果您想用C ++创建对象并在QML中使用该特定对象,那么您需要使用QQmlContext::setContextProperty

QQuickView view;
Myclass myClass;
view.engine()->rootContext()->setContextProperty("myclass", &myClass);

在您注册类型或将对象设置为QML后,您现在可以使用它们。

Myclass {
    onDataReady: waveItem.setSamples(buff, len);
}

或者,您也可以使用connect()

Myclass {
    id: myClass
    Component.onCompleted: myClass.dataReady.connect(waveItem.setSamples);
}

注意:您也可以查看Connections

相关问题