Как привязать к сигналу объекта корневого контекста из QML

Я создаю приложение QML (QT 5.2)

Предположим, у меня есть некоторый объект, установленный в качестве корневого контекста:

viewer.rootContext()->setContextObject(&view_model);

Теперь я хочу привязаться к сигналу view_model из QML:

Connections {
    target: ??? WHAT SHOULD GO HERE ???
    onSignalStateChanged: console.log("signal")
}

Не могу понять, что должно быть целью.

Важно: я не хочу использовать setContextProperty.


person Werolik    schedule 20.05.2014    source источник
comment
Important: I don't want to use setContextProperty. есть веская причина, почему?   -  person dtech    schedule 09.11.2014
comment
Вся идея заключается в том, чтобы предоставить QML доступ к data_context как к одной точке входа. Итак, когда я использую setContextProperty каждый раз, когда хочу его использовать, мне нужно добавить «dataContext». префикс, который немного раздражает. В результате мы использовали его для создания 1 соединения, которое нам было нужно ;)   -  person Werolik    schedule 13.11.2014
comment
когда я использую setContextProperty каждый раз, когда хочу его использовать, мне нужно добавить «dataContext». префикс, который немного раздражает - ммм, нет. Ничто не обязывает. Если вы понимаете вашу проблему, она заключается в том, что вы не получаете идентификатор для ссылки на синтаксис соединения, потому что QML не предоставляет его для объекта контекста. В этом случае вам придется использовать setContextProperty, чтобы получить его.   -  person dtech    schedule 13.11.2014
comment
Может быть, я неправильно понял документацию тогда. В любом случае, моей целью было избежать использования setContextProperty. У меня были мысли: зачем мне это нужно, если я задаю весь объект контекста?   -  person Werolik    schedule 18.11.2014
comment
Может быть, вы сделали. Не случайно существует множество статей о предоставлении объектов C++ для QML, и все они связаны с методом setContextProperty(), и ни одна из них не требует установки объекта контекста.   -  person dtech    schedule 19.11.2014


Ответы (1)


Кажется, вы не можете использовать Connections, если у вас нет доступа к экземпляру объекта (например, через свойство контекста). Но вы все равно можете использовать следующее:

function onSignal() {
    console.log( "signal" );
}
Component.onCompleted: {
    onSignalStateChanged.connect( onSignal );
}
person RSATom    schedule 09.11.2014
comment
правильно ли я понимаю, что вы создаете соединение здесь динамически, как только объект был создан? Я попробую, если получится. - person Werolik; 18.11.2014
comment
Да, точно. Я пытался найти другие способы, но безуспешно. Я потратил несколько часов, чтобы найти его... - person RSATom; 19.11.2014
comment
перед этой находкой я должен использовать QQmlContext* context = m_quickViewPtr->rootContext(); context->setContextObject( this ); context->setContextProperty( QStringLiteral( "plugin" ), this ); - person RSATom; 19.11.2014