У меня проблемы с попыткой достичь цели 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 к контейнеру, и он тоже не работал. Пожалуйста помоги!.
Я бы посоветовал вам альтернативный подход, который я использовал раньше. Вы можете установить 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 () возвращает элемент управления, который испустил сигнал.
В справочнике по API нет сигнал onTouch для контейнера.
Наоборот другого элемента, как CustomControl
Я не знаю, как ваш сигнал был успешно подключен к вашему слоту, но я предполагаю, что он был передан из другого компонента внутри контейнера. Таким образом, целью может быть метка или что-то еще внутри.