2012-10-31 2 views
2

BB10 캐스케이드 API에서 Touch Event 대상에 도달하는 데 문제가 있습니다. 나는 여러 컨테이너를 가지고 있는데 하나는 다른 컨테이너보다 아래쪽에 있고 하나의 컨테이너에는 동일한 Touch 신호와 슬롯이 할당되어 있습니다. 모든 것이 C++에서 동적으로로드됩니다. 따라서 각 터치 이벤트를 잡으려면 어떤 컨테이너가 이벤트를 트리거했는지 알아야합니다. TouchEvent에서 TARGET 속성을 사용해야한다는 것을 읽었지만 제대로 작동하지 않고 이유를 알지 못합니다. 잘 작동하고 다른캐스케이드 타깃 가져 오기 TouchEvent not working

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 객체를 Container로 캐스팅하려고 시도했지만 작동하지도 않았습니다. 도와주세요!.

답변

1

이전에 사용했던 다른 방법을 조언 해드립니다. 이 같은 컨트롤의 개체 이름을 설정할 수 있습니다 SLOT에

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

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

&는 신호를 방출을 제어하는 ​​알 수 그것을 사용 : 여기

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

는 보낸 사람이() 신호를 방출 제어를 반환합니다.

0

API 참조에는 컨테이너에 대해 onTouch signal이 없습니다.

CustomControl

나는 당신의 신호가 성공적으로 슬롯에 연결 한 방법을 모르는 같은 다른 요소의 반대로

,하지만 난이 컨테이너 안에 다른 구성 요소에서 전파 된 것으로 생각한다. 따라서 표적은 라벨 또는 그 안의 다른 것일 수 있습니다.