我正在嘗試使用以下引數型別將 QML 信號連接到 Qt 插槽:
在 QML 方面:
signal Sig(var info)
在 Qt 方面:
QObject::connect(topLevel, SIGNAL(Sig(QVariantMap)), &mObj, SLOT(mSlot(QVariantMap)));
這給了我以下資訊:
QObject::connect: No such signal QQuickWindowQmlImpl_QML_24::Sig(QVariantMap) in ...
所以,我假設型別var和QVariantMap不匹配。根據這個檔案,QVariantMap型別被轉換為 JavaScript 物件。但我不確定它是否也反過來。
我已經實作了一種相反型別的連接(帶有 QVariantMap 的 Qt 信號,帶有“Connections”元素的 QML 處理程式),它作業得很好。我能夠將信號的引數作為 JS 物件。
順便說一句,我也在string我的代碼中嘗試了與引數型別相同的連接,所以我認為我的代碼中沒有另一個不相關的錯誤。
如何使用信號/槽機制將 JS 物件傳遞到 Qt(C ) 端?我一直無法找到解決方案。實際上,甚至沒有與我的案例(信號和插槽引數型別)匹配的示例。這讓我覺得我在做某種設計錯誤。
uj5u.com熱心網友回復:
引數QVariant在 C 端是 s,所以你需要做
QObject::connect(topLevel, SIGNAL(Sig(QVariant)), &mObj, SLOT(mSlot(QVariant)));
請注意,您還需要更改mSlot引數型別,因為QVariant不能隱式轉換為QVariantMap. 要獲取槽中的地圖,請使用QVariant::toMap()方法,如果它確實是地圖(如果不是,此方法回傳空地圖,您需要進行一些除錯)。
它反過來作業,因為QVariantMap可以隱式轉換為QVariant.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/520147.html
標籤:C qtqml
上一篇:如何反轉滑鼠區域中的滑鼠游標行為
