2014-11-24 103 views
0

我在qt4.8.4中將C++信號連接到qml函數。它工作正常,但在應用程序的輸出如下警告使得:將C++信號連接到qml插槽時出現警告

對象::連接:沒有這樣的插槽QDeclarativeItem_QML_9 :: onValue_changed(雙) 對象::連接:(發件人名稱: '進myWidget')

我已經定義QML插槽這樣的:

import QtQuick 1.0 

Item { 
    id: root 
    property real value : 0 

    Connections 
     { 
      target: controllerObject 
      onValue_changed : 
      { 
       root.value = value 
      } 
     } 
} 

這是我的C++信號和如何將它連接到QML插槽:

ui->view->rootContext()->setContextProperty("controllerObject",this); 
ui->view->setSource(QUrl("qrc:/myQml.qml")); 
ui->view->setStyleSheet("background-color: rgba(255, 255, 255, 0);"); 
ui->view->setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform | QPainter::HighQualityAntialiasing); 
ui->view->setResizeMode(QDeclarativeView::SizeRootObjectToView); 

connect(this,SIGNAL(value_changed(double)),(QObject *)ui->view->rootObject(),SLOT(onValue_changed(double))); 

爲什麼會發出警告?

如何省略警告?

回答

3

我已經定義QML插槽這樣的:

你錯了。它不是插槽定義,它是connection本身 (添加對象controllerObject的信號value_changed的QML處理程序)。 這就是爲什麼你的代碼工作。但在這行:

連接(在此,SIGNAL(value_changed(雙)),(QObject的*)UI->查看 - > rootObject(),SLOT(onValue_changed(雙)));

您正在嘗試連接現有信號value_changed到inexisting onValue_changed (很明顯,它存在於你的代碼,但不能在視rootObject)。 這就是爲什麼你得到警告。

結論
你試圖連接信號兩次,但只有一個方法是成功的,那麼代碼運行良好。

+0

感謝您的回答。 – 2014-11-24 10:26:16