<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[[SOLVED] Get qml signals]]></title><description><![CDATA[<p dir="auto">Hi<br />
I have a problem to connect to my qml signals. I have a qdeclarative view that have main.qml as source. I use a qdeclarativeitem and qdeclarativecomponent to add new qml items to the declarative view. My qml signals is in the components that are added to the declarativeview. Does the rootobject get signals from my added qml item? Are there a way for the added qml item to pass the signals to rootobject?</p>
<p dir="auto">This is my set up<br />
QDeclarative view<br />
-Main.qml</p>
<p dir="auto">QDeclarativeItem is added to view-&gt;rootobject<br />
QDeclarativeItem<br />
-testHelper.qml (Its here where the signals are)</p>
<p dir="auto">Main.qml<br />
@Rectangle {<br />
id: container<br />
width: 800<br />
height: 600<br />
color: "white"<br />
}@</p>
<p dir="auto">Qml file for item where the signals are.<br />
@<br />
import QtQuick 1.1</p>
<p dir="auto">Rectangle {<br />
id: rect<br />
objectName: "Button"<br />
signal newPositionSignal(string position)<br />
signal deleteSignal(string objectName)<br />
signal selectedSignal(string objectName)</p>
<p dir="auto">onNewPositionSignal: {<br />
console.log('newPositionSignal: ' + position);<br />
}</p>
<p dir="auto">onDeleteSignal: {<br />
console.log('deleteSignal: object "' + objectName + '"" deleted');<br />
}<br />
onSelectedSignal: {<br />
console.log('selectedSignal: object "'+ rect.objectName + '"" selected');<br />
content.border.color = "blue"<br />
}</p>
<p dir="auto">Rectangle {<br />
id: content</p>
<p dir="auto">width: childrenRect.width<br />
height: childrenRect.height<br />
border.color: "black"<br />
border.width: 2<br />
color: "transparent"</p>
<p dir="auto">Component.onCompleted: {<br />
var component = Qt.createComponent("../Indicators/TankLevel.qml");<br />
if (component.status === Component.Ready) {<br />
var button = component.createObject(content);<br />
}<br />
}</p>
<p dir="auto">MouseArea {<br />
id: contentMouseArea<br />
anchors.fill: parent<br />
drag.target: parent<br />
onClicked: {<br />
rect.selectedSignal(rect.objectName);<br />
}<br />
onReleased: {<br />
rect.newPositionSignal(rect.objectName+','+ parent.x+','+ parent.y+','+ parent.z);<br />
}<br />
}<br />
}</p>
<p dir="auto">Rectangle {<br />
id: remove<br />
width: 20<br />
height: 20<br />
color: "black"<br />
anchors.right: content.right<br />
anchors.top: content.top</p>
<p dir="auto">Text {<br />
anchors.centerIn: parent<br />
text: "X"<br />
color: "white"<br />
}</p>
<p dir="auto">MouseArea {<br />
anchors.fill: parent<br />
onClicked: {<br />
rect.deleteSignal(rect.objectName);<br />
rect.destroy();<br />
}<br />
}<br />
}<br />
}<br />
@</p>
<p dir="auto">Setting up declarativeview<br />
@<br />
qmlPath = path;<br />
view = new QDeclarativeView(this);<br />
view-&gt;setSource(QUrl::fromLocalFile(path));</p>
<p dir="auto">view-&gt;setResizeMode(QDeclarativeView::SizeViewToRootObject);</p>
<pre><code>viewerManager vManager(cMan);
vManager.setRootObject(view-&gt;rootObject());
QObject::connect(view-&gt;engine(), SIGNAL(quit()), view, SLOT(close()));
</code></pre>
<p dir="auto">@</p>
<p dir="auto">Function for inserting item to the view<br />
@<br />
QDeclarativeComponent testcomponent(view-&gt;engine());<br />
testcomponent.loadUrl(QUrl::fromLocalFile("testHelper.qml"));<br />
QDeclarativeItem* testcomp = qobject_cast&lt;QDeclarativeItem *&gt;(testcomponent.create());<br />
testcomp-&gt;setParent(view-&gt;rootObject());<br />
testcomp-&gt;setParentItem(qobject_cast&lt;QDeclarativeItem *&gt;(view-&gt;rootObject()));<br />
QDeclarativeEngine::setObjectOwnership(testcomp, QDeclarativeEngine::JavaScriptOwnership);<br />
@</p>
<p dir="auto">Class that handles qml signals<br />
@<br />
viewerManager::viewerManager(QObject *parent) :<br />
QObject(parent), mRoot(0)<br />
{<br />
}</p>
<p dir="auto">viewerManager::viewerManager(componentManager *component, QObject *parent) :<br />
QObject(parent), mRoot(0)<br />
{<br />
mComponent = component;<br />
}</p>
<p dir="auto">void viewerManager::setRootObject(QObject *root){<br />
if (mRoot != 0) disconnect(mRoot);</p>
<pre><code>mRoot = root;

if(mRoot){
    connect(root, SIGNAL(newPositionSignal(QString)), this, SLOT(newPositionSignal(QString)));
}
</code></pre>
<p dir="auto">}<br />
void viewerManager::newPositionSignal(QString pos){<br />
qWarning() &lt;&lt; "Got signal";<br />
}<br />
@</p>
]]></description><link>https://forum.qt.io/topic/32873/solved-get-qml-signals</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 22:54:58 GMT</lastBuildDate><atom:link href="https://forum.qt.io/topic/32873.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 09 Oct 2013 09:08:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [SOLVED] Get qml signals on Fri, 18 Oct 2013 06:40:58 GMT]]></title><description><![CDATA[<p dir="auto">I solved the issue, I connected the signals in when I added the declarativecomponent.</p>
<p dir="auto">@<br />
QDeclarativeComponent testcomponent(view-&gt;engine());<br />
testcomponent.loadUrl(QUrl::fromLocalFile("testHelper.qml"));<br />
QDeclarativeItem* testcomp = qobject_cast&lt;QDeclarativeItem *&gt;<br />
(testcomponent.create());<br />
//Added all signals here<br />
QObject::connect(testcomp,SIGNAL(test()),this,SLOT(test()));</p>
<p dir="auto">testcomp-&gt;setParent(view-&gt;rootObject());<br />
testcomp-&gt;setParentItem(qobject_cast&lt;QDeclarativeItem *&gt;(view-&gt;rootObject()));<br />
QDeclarativeEngine::setObjectOwnership(testcomp, QDeclarativeEngine::JavaScriptOwnership);<br />
@</p>
]]></description><link>https://forum.qt.io/post/199558</link><guid isPermaLink="true">https://forum.qt.io/post/199558</guid><dc:creator><![CDATA[chaf84]]></dc:creator><pubDate>Fri, 18 Oct 2013 06:40:58 GMT</pubDate></item></channel></rss>