获取级联TouchEvent的目标不起作用

Posted

技术标签:

【中文标题】获取级联TouchEvent的目标不起作用【英文标题】:Get target of cascades TouchEvent not working 【发布时间】:2012-10-31 15:49:00 【问题描述】:

我在尝试从 BB10 级联 API 获取触摸事件的目标时遇到问题。我有几个容器,一个在另一个下面,每个容器都分配了相同的 Touch 信号和插槽。一切都是从 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,但它也不起作用。请帮忙!。

【问题讨论】:

【参考方案1】:

我会建议您使用我之前使用的替代方法。您可以像这样设置控件的 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() 返回发出信号的控件。

【讨论】:

【参考方案2】:

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

与CustomControl等其他元素相反

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

【讨论】:

以上是关于获取级联TouchEvent的目标不起作用的主要内容,如果未能解决你的问题,请参考以下文章

级联在保存数据时不起作用

JPA/Hibernate 级联删除不起作用

Postgres - 级联删除不起作用

非级联类型的菜单栏项目在 Mac OSX 的 Tkinter 上不起作用

删除级联在这种情况下不起作用[重复]

protobuf 生成的 Java 对象上的级联 bean 验证不起作用