Hi,

On 04/11/2010, at 10:26 PM, ext René Hansen wrote:

> I'd like to be able to find child objects in a QML structure and to do
> that, I've exposed a new QML Object with qmlRegisterType, which provides
> me with:
> 
> QObject *QmlUnitTestHelper::getChildById(QObject *parent, QString name) {
>        return parent->findChild<QObject *>(name);
> }
> 
> And in Qml I have something like this:
> 
> Rectangle {
> 
>        QmlUnitTestHelper {
>                id: quth
>        }
> 
>        Rectangle {
>                id:outerRect
>                Rectangle {
>                id:innerRect
>                Text {
>                        id:label
>                        text: "Hello World"
>                }
>        }
>        }
> }
> 
> Which should enable me to test in something like this manner:
> 
> quth.getChildById(outerRect, "innerRect").label.text == "Hello World"
> 
> However, this doesn't work as expected, so I guess my assuming the QML
> id property being the same as a QObjects objectName is faulty.

That's correct -- id and objectName are separate. You can explicitly give a QML 
item an objectName, though, if needed:

Rectangle {
    id: myRect
    objectName: "theRectangle"
}

(Bea has just added some great documentation on this, which should hopefully be 
showing up on the website soon)

> How would I go about doing something like this?

For the above example, you should be able to test the label's text with:
label.text == "Hello World"
(within a component, the id space is "flat", rather than qualified)

If you need to access the item from outside the component, a property alias 
(http://doc.qt.nokia.com/4.7/qml-extending-types.html#property-aliases) might 
help. You could for example add

property alias testLabel: label

to the top-most Rectangle to make label accessible to the "outside world" via 
testLabel.

>From the class name, it looks like you might be looking at writing autotests 
>in QML? If so (and If you haven't seen them already), here are a few projects 
>that might be of interest:
* qmlunit (https://github.com/fgrehm/qmlunit)
* the Qt3D team's QML unit testing 
(http://qt.gitorious.org/qt-labs/qt3d/trees/master/tests/auto/qml3d)

Regards,
Michael
_______________________________________________
Qt-qml mailing list
Qt-qml@trolltech.com
http://lists.trolltech.com/mailman/listinfo/qt-qml

Reply via email to