2017-06-21 51 views
0

我想連接到來自C++的對象的Component.onCompleted信號。我應該使用什麼語法?如何連接到C++的連接信號?

+1

你如何創建組件?從C++還是QML? – m7913d

+0

我認爲這沒有道理。例如,當您使用'QQmlApplicationEngine :: load()'創建QML樹時,將在連接到信號之前執行'Component.onCompleted'。無論如何 - 你可以爲你的對象創建一些代理信號,從Component.onCompleted調用,因此連接到C++的這個信號。 – folibis

+1

通過setContextProperty()使QML可以訪問槽對象,並直接從Component.onCompleted處理程序調用槽 –

回答

0

所以,你可以使用此代碼去Component.completed和Component.destruction信號接入:

QObject* attached_component = qmlAttachedPropertiesObject<QQmlComponent>(qml_component); 
QObject::connect(attached_component, SIGNAL(destruction()), this, SLOT(onDestruction())); 
QObject::connect(attached_component, SIGNAL(completed()), this, SLOT(onCompleted())); 

qml_component是你的QML組件的指針,「這」是一個具有onDestruction和onCompleted插槽對象。 也許這是一個黑客,但現在它的工作原理(QT 5.8 VS2013)

0

一種解決方案是從QML調用C++ funtion:

Component.onCompleted:Qml_utils.connect_qmlobject(this) 

C++代碼

Q_INVOKABLE void qml_utils::connect_qmlobject(QObject*obj) { 
    //do something with QML QObject: 
    connect(obj, SIGNAL(destroyed(QObject*)), 
      this,SLOT(disconnect_qmlobject(QObject*))); 
}