我想在QML插槽中使用我在QML中注册的C ++类型作为参数。所以我已经有了C ++信号,它有QString类型参数:
emit newMessage(myString);
和QML插槽:
onNewMessage: {
console.log(myString);
}
现在我想将在QML中注册的C ++类型作为此插槽的参数传递。 我找到similar question,但我不明白我怎么能用这个反之亦然。任何帮助都会有用。
答案 0 :(得分:0)
所以让我们假设您希望通过信号/插槽设置将QObject派生文件从C ++传递到QML。
class MyClass : public QObject
{
Q_OBJECT
public:
explicit MyClass(QObject *parent = 0);
signals:
void sendSignal(MyClass* anotherMyClass)
public slots:
void send_signals() { emit sendSignal(this); }
};
如果您有一个名为MyClass的C ++类型,它是一个基于QObject的类型,并且您成功完成了
qmlRegisterType<MyClass>("com.myapp", 1, 0, "MyClass");
然后在QML中你所要做的就是:
import QtQuick 2.0
import com.myapp
Item {
MyClass {
id: myInstance
Component.OnCompleted: {
// connect signal to javascript function
myInstance.sendSignal.connect( myInstance.receiveSignal);
}
function receiveSignal(mySentObject) {
// here is your QObject sent via Signal
var receivedObject = mySentObject;
// Now to send it back
// (will cause an endless loop)
myInstance.sendSignal(receivedObject);
// or you could do this to perform
// the same endless loop
receivedObject.send_signals();
// or you could do this to perform
// the same endless loop
receivedObject.sendSignal(myInstance)
}
}
}
摘要:
你可以发送任何QObject派生的对象,只要它在QML引擎中注册为实际对象,你只需将其视为QML中的任何其他类型
希望这有帮助