0

QProcess を使用して、利用可能な Bluetooth デバイスをスキャンしています。QProcess は、hcitool scan などのコマンド ライン コマンドを使用して、利用可能なデバイスをチェックします。出力は正規表現を使用して解析され、デバイス名、OPUSH のチャネル、デバイスのタイプ、デバイス アドレスなどの詳細を含むデータ構造のセル (スキャンされたデバイスの数に等しい) があります。

QListWidget を使用するすべてのデバイスを表示するには

    //Display on list widget
    //Send all information regarding device name, address, OPUSH channel and icon
    //to child widget myBTwidget
    myBTwidget *MyItem = new myBTwidget();

    MyItem->BTName(DeviceName);

    MyItem->BTAddress(address);

    MyItem->BTChannelNo(channel);

    MyItem->BTIcon(icon);

    QListWidgetItem *item=new QListWidgetItem();

    item->setSizeHint(QSize(720,50));

    this->ui->listWidget->addItem(item);

    //Add child widget myBTwidget to list widget
    this->ui->listWidget->setItemWidget(item,MyItem);

カスタム子ウィジェットには、1. デバイスのタイプの画像を示すラベルがあります 2. デバイス名を表示するボタン (フラット) 3. ファイルを送信する OPUSH チャネルが使用可能かどうかを示すラベル

listwidgetitem プッシュボタンをクリックすると、Bluetooth デバイスとペアリングされ、ファイルが送信されます。QListwidgetitem clicked() シグナルを、デバイス名 clicked() スロットを含む childwidget プッシュボタンに接続したいと思います。このようにして、ユーザーはアイテムのどこでも押すことができ、デバイスはペアリングしてファイルを送信します。

どうすればいいですか?

リストウィジェットは親クラスにあり、アイテムは子ウィジェットです。qlistwidgetitem の clicked シグナルをスロット onitemclicked() に接続してみました。onitemclicked() 関数で、プッシュボタンのクリック関数を実装するカスタム childwidget 内の関数を呼び出そうとしましたが、デバイス名、アドレス、チャネルなどの詳細がないため、操作を実行できません。

デバイス名としてテキストを含む子ウィジェットのプッシュボタンをクリックするだけで、すべての詳細が表示され、ペアリングと送信操作が実行されます。

私はいくつかの解決策を考えました.1.グローバル構造を作成し、その中にデータを保存してORを利用します.2.データベースにテーブルを作成し、子ウィジェットのロードを解析しながらデータを保存し、このデータを使用して関数を呼び出してファイルを送信します

知りたいのですが、もっと良い方法はありますか?個々の listwidgetitem の詳細を何らかの方法でカスタム子ウィジェットに保存し、アイテムをクリックしたときに送信できる場合は、すべての詳細を取得し、関数を呼び出してペアリングを行い、ファイルを送信しますか??

どうか私を助けてください。

ありがとうございました

4

1 に答える 1

0

まず第一に: QListWidgetItem には clicked() シグナルがありません。(ウィジェット自体ではありません) QListWidget::itemClicked(QListWidgetItem*) に接続する必要があります - ご覧のとおり、このシグナルはクリックされた特定のアイテムを提供します。

もちろん、これだけでは役に立ちません。Item は表示されるデータを認識していないからです。setData() を使用して QListWidgetItem 自体に情報を保存する必要があります。これにより、後でアイテムから取得できます。

しかし、おそらくデータを二重に保存したくないので (myBTwidget に 1 回、QListWidgetItem に 1 回)、QListWidgetItem にのみデータを保存し、ウィジェットをデリゲートにリファクタリングすることができます...

デリゲートのドキュメントを参照してください。そこにはいくつかの例があります。(デリゲートがQListWidgetで問題なく動作するかどうかはわかりません。QStandardItemModel/custom モデルでQListViewを使用する方が良い選択かもしれません)

于 2013-11-12T10:03:08.820 に答える