Получить цель каскадов TouchEvent не работает

У меня проблемы с попыткой достичь цели Touch Event из каскада API BB10. У меня есть несколько контейнеров, один под другим, и каждому из них назначены одинаковый сигнал касания и слот. Все динамически загружается из C ++. Итак, чтобы перехватить каждое сенсорное событие, мне нужно знать, какой контейнер вызвал событие. Я читал, что мне просто нужно использовать свойство TARGET из TouchEvent, но он не работает, и я не знаю почему. Поэтому я прошу о помощи

Вот мой код:

for (int i = 0; i < 10; i++) {
QmlDocument *qml = QmlDocument::create("asset:///customComponents/TableRow.qml").parent(this);

Container *passivesRow = qml->createRootObject<Container>();
passivesRow->setProperty("labelTextOne", "Hello_" + i);

bool res = QObject::connect(passivesRow,
SIGNAL(touch(bb::cascades::TouchEvent*)), this,
SLOT(handleAccountTouch(bb::cascades::TouchEvent*)));

Q_ASSERT(res);
Q_UNUSED(res);

myCurrentPageContainer->add(passivesScroll);
}

void PosicionConsolidada::handleAccountTouch(bb::cascades::TouchEvent* event) {
if (event->touchType() == TouchType::Up) {
qDebug() << "event catched";

VisualNode *p = event->target();
qDebug() << "object p: " << p->property("labelTextOne"); //Print nothing
}
}

Все остальное работает просто отлично. Мой список Контейнеров создается с соответствующими текстами. Когда я нажимаю один из них, событие успешно отслеживается. Я также пытался привести объект VisualNode к контейнеру, и он тоже не работал. Пожалуйста помоги!.

2

Решение

Я бы посоветовал вам альтернативный подход, который я использовал раньше. Вы можете установить objectName элемента управления следующим образом:

passiveRow->setObjectName("Hello_" + i");

QObject::connect(passiveRow, SIGNAL(touch(bb::cascades::TouchEvent*)), this,
SLOT(handleAccountTouch(bb::cascades::TouchEvent*)));

& используя SLOT, вы можете узнать, какой элемент управления излучает сигнал:

if (event->touchType() == TouchType::Up) {
qDebug() << "object: " << QObject::sender()->objectName();
}

Здесь sender () возвращает элемент управления, который испустил сигнал.

1

Другие решения

В справочнике по API нет сигнал onTouch для контейнера.

Наоборот другого элемента, как CustomControl

Я не знаю, как ваш сигнал был успешно подключен к вашему слоту, но я предполагаю, что он был передан из другого компонента внутри контейнера. Таким образом, целью может быть метка или что-то еще внутри.

0