2

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
    }
}

他のすべてはうまく機能しています。私のコンテナのリストは、それぞれのテキストでうまく作成されています。そのうちの1つをクリックすると、イベントが正常にキャッチされています。VisualNodeオブジェクトをContainerにキャストしようとしましたが、どちらも機能しませんでした。助けてください!。

4

2 に答える 2

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() はシグナルを送信したコントロールを返します。

于 2012-11-05T13:24:57.047 に答える
0

API リファレンスには、コンテナーのonTouch シグナルはありません。

CustomControlのような他の要素とは逆に

シグナルがどのようにしてスロットに正常に接続されたかはわかりませんが、コンテナー内の別のコンポーネントから伝播されたと推測されます。したがって、ターゲットはラベルまたはその中の何かである可能性があります。

于 2012-11-01T16:06:53.490 に答える