簡體   English   中英

qt5 qml c ++交互

[英]qt5 qml c++ interaction

http://doc.qt.io/qt-5/qtqml-cppintegration-interactqmlfromcpp.html#connecting-to-qml-signals

我已閱讀該文章的大部分內容,並且似乎理解除了c ++中的部分之外的所有內容。 QObject::connect(item, SIGNAL(qmlSignal(QString)), &myClass, SLOT(cppSlot(QString)));

很清楚itemSIGNALmyClassSLOTcppSlotQString來自哪里,但qmlSignal來自哪里? 當然它來自.qml文件,但是如果它是通過運行時加載的,那么編譯器如何找到它呢?

很清楚item,SIGNAL,myClass,SLOT,cppSlot和QString來自哪里,但qmlSignal來自哪里? 當然它來自.qml文件,但是如果它是通過運行時加載的,那么編譯器如何找到它呢?

qmlSignal是由QML代碼發出的,並且正如您所指出的那樣在C ++端捕獲。 除了代碼處理的C ++類型之外,編譯器對運行時發生的事情一無所知。

根QML項反映到QObject,它具有嵌套的信號和槽列表,非常類似於純C ++ QObject。 每個信號和插槽都有一個測試字符串簽名,插槽也有映射到某個類成員。

QQuickView view(QUrl::fromLocalFile("MyItem.qml"));
QObject *item = view.rootObject(); // get QObject from QML root

MyClass myClass;
QObject::connect(item, SIGNAL(qmlSignal(QString)), // find "qmlSignal(QString)" in the list of signals of 'item'
                 &myClass, SLOT(cppSlot(QString))); // connect that signal entry to the found cppSlot(QString) entry of myClass object

為了更好地理解信號槽內部,有一篇很好的文章: http//woboq.com/blog/how-qt-signals-slots-work.html

以上當然是關於基於字符串的連接: http//doc.qt.io/qt-5/signalsandslots-syntaxes.html

關於QML信號/插槽綁定的文章不多,但有些文章: http//www.kdab.com/qml-engine-internals-part-2-bindings/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM