0

私は .qml ファイルで ListView のシグナルをキャッチしようとしているので、次のようにしています:

ListView *userList = root->findChild<ListView*>("userList");
Q_ASSERT(userList);

それはリストを取得し、私が試したとき:

Q_ASSERT(connect(userList, SIGNAL(triggered(QVariantList indexPath)), this, SLOT(onUserListTriggered(QVariantList indexPath))));

次のエラーが表示されます。

Object::connect: No such signal bb::cascades::QmlListView::triggered(QVariantList indexPath)
Object::connect:  (sender name:   'userList')
ASSERT: "connect(userList, SIGNAL(triggered(QVariantList indexPath)), this, SLOT(onUserListTriggered(QVariantList indexPath)))"

意味がない。ListViewのドキュメントは、クラスがこのシグナルを発することを示しており、ヘッダー listview.h で次のように確認できます。

Q_SIGNALS:
/*!
        * @brief Emitted when a list item is triggered by the user.
        *
        * Typically, this signal is emitted when an item is tapped by the user 
        * with the intention to execute some action associated with it. 
        * This signal is, for example, not emitted when items are tapped 
        * during multiple selection, where the intention is to select the 
        * tapped item and not trigger an action associated with it.
        *
        * @param indexPath Index path to the triggered item.
        */
        void triggered(QVariantList indexPath);
4

2 に答える 2

2

信号をスロットに接続するときは、パラメーターのデータ型のみを指定します。connect call ステートメントを以下のステートメントに置き換えます。

bool ok = connect(userList, SIGNAL(triggered(QVariantList)), 
  this, SLOT(onUserListTriggered(QVariantList)));
// Q_ASSERT the bool so that the connect will be included in Release code
Q_ASSERT(ok);
于 2013-01-22T04:45:51.747 に答える
0

完全な名前空間を配置する必要があることもわかりました。これはあなたの例では必要ありませんが、たとえば、私はしなければなりませんでした:

if (!connect(root, SIGNAL(popTransitionEnded(bb::cascades::Page*)), this,
    SLOT(navPagePopped(bb::cascades::Page*)))) {
    qDebug() << "UNABLE to connect popTransitionEnded to navPagePopped";
}

Qt フレームワークは、シグナル テーブルを作成するときにパラメーターの完全な名前空間を使用していると推測しています。

于 2013-01-22T08:06:23.100 に答える