获得级联TouchEvent无法正常工作的目标

时间:2012-10-31 15:49:01

标签: c++ qt qml touch-event blackberry-10

我在尝试从BB10级联API尝试触摸事件的目标时遇到问题。我有几个容器,一个在另一个下面,并且每个容器都分配了相同的触摸信号和插槽。一切都是从C ++动态加载的。因此,为了捕获每个触摸事件,我需要知道哪个容器触发了事件。我已经读过,我只需要使用TouchEvent中的TARGET属性,但是不能正常工作,我不知道为什么。所以我在寻求帮助

这是我的代码:

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,但它也无法正常工作。请帮忙!

2 个答案:

答案 0 :(得分:1)

我会建议你以前用过的替代方法。您可以像这样设置objectName of control:

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 :(得分:0)

在API参考中,容器没有onTouch signal

CustomControl

等其他元素相反

我不知道您的信号是如何成功连接到您的插槽的,但我猜它是从容器内的另一个组件传播的。因此目标可能是标签或其中的其他内容。