将c ++信号连接到qml插槽时发出警告

时间:2014-11-24 04:37:23

标签: c++ qt qt4 qml qt-quick

我在qt4.8.4中将c ++信号连接到qml函数。它工作正常但在应用程序输出中发出警告如下:

  

Object :: connect:没有这样的插槽QDeclarativeItem_QML_9 :: onValue_changed(double)     Object :: connect :(发件人姓名:' 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)));

为什么要发出警告?

如何省略警告?

1 个答案:

答案 0 :(得分:3)

  

我已经定义了这样的qml插槽:

你错了。它不是插槽定义,而是connection本身 (为对象value_changed的信号controllerObject添加QML处理程序。 这就是你编码工作的原因。但在这一行:

  

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

您正尝试将现有信号value_changed连接到不存在的onValue_changed (显然,它存在于您的代码中,但不存在于rootObject视图中)。 这就是你收到警告的原因。

<强>结论
您尝试连接信号两次,但只有一个方法成功,因此代码运行良好。