特定QML項目的上下文中發射信號I有兩個QML項具有相同接口(信號發射和處理)和不同objectName
屬性值:如何在從C++代碼
Text {
id: the_first_item
objectName: "the_first_item"
signal ping();
onPing: {
text = "pong! (variant 1)"
}
}
Text {
id: the_second_item
objectName: "the_second_item"
signal ping();
onPing: {
text = "pong! (variant 2)"
}
}
欲在這些項目之一的背景下發出ping
信號。在QML我會做這種方式:
Item {
onSomething: the_first_item.ping()
}
的問題是,我想從C做++代碼。我有一個指向QQuickItem
類的實例的指針,它使用findChild
方法和值objectName
屬性檢索。
用於處理信號的唯一的解決方案從我已經發現了C++代碼觸發是在其主體中定義其自己的QObject
衍生物,聲明一個信號的方法,然後簡單地調用它在這個類的一個實例的上下文中:
class SomeLogic : public QObject
{
public signals:
void ping();
public:
void doSth() { ping(); }
};
然後,把一個指針實例此類發動機的根上下文和連接處理這個信號在QML的方式如下:
Text {
id: the_first_item
//objectName: "the_first_item"
Connections {
target: the_instance_of_some_logic_property_name
onPing: {
text = "pong!"
}
}
}
但是,如果我理解正確的東西是不好的,因爲如果the_second_item
的定義方式相同,它們都會處理髮出的ping
信號,我只想觸發其中的一個。
現在,當我寫它,我認爲,在每個項目可能提供一個效用函數,然後在自己的上下文發出ping
信號,這樣的:
Text {
id: the_first_item
objectName: "the_first_item"
signal ping();
onPing: {
text = "pong!"
}
function emitPing() {
ping()
}
}
在simplier情況下, emitPing
就足夠了(我不需要定義信號和處理程序 - 我只需在emitPing
函數中設置文本),但如果我理解正確,函數和信號之間的區別在於函數當信號異步時,調用是同步的nd由於某些原因(從QML啓動但用C++處理的GUI狀態之間的轉換)我希望它是異步的。我也想避免必須在任何地方寫出無所不能的emitPing
函數。
問題:有一種方法以發射ping
信號,從C++代碼,在僅僅the_first_item
上下文?
非常感謝您的幫助:) –
這就是爲什麼我在這裏:D – Felix