我有一个这样的课程:
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)连接此类。怎么可能?
答案 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
。