[英]How to use a custom Qt C++ type with a QML slot?
我想將在QML中注冊的C ++類型用作QML插槽中的參數。 所以我已經有了具有QString類型參數的C ++信號:
emit newMessage(myString);
和QML插槽:
onNewMessage: {
console.log(myString);
}
現在,我想將在QML中注冊的C ++類型作為此插槽的參數。 我發現了類似的問題 ,但我不知道如何使用反之亦然。 任何幫助將是有用的。
因此,假設您想通過信號/插槽設置將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中的任何其他類型一樣對待它
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.