我在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)));
为什么要发出警告?
如何省略警告?
答案 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
视图中)。
这就是你收到警告的原因。
<强>结论强>:
您尝试连接信号两次,但只有一个方法成功,因此代码运行良好。