0

我正在使用 QProcess 扫描可用的蓝牙设备。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 按钮,它将与蓝牙设备配对并发送文件。我想将 QListwidgetitem clicked() 信号连接到包含设备名称 clicked() 插槽的子控件按钮。通过这种方式,用户可以按项目上的任何位置,设备配对并发送文件。

我该怎么做?

listwidget 在父类中,item 是子widget。我尝试将 qlistwidgetitem 的点击信号连接到插槽 onitemclicked()。在 onitemclicked() 函数中,我尝试在自定义 childwidget 中调用实现按钮单击功能的函数,但由于它没有设备名称、地址、通道等详细信息,因此无法执行操作。

如果我只需单击包含文本作为设备名称的子小部件按钮,它就会包含所有详细信息,并将执行配对和发送操作。

我想到了几个解决方案,1.创建一个全局结构并将数据保存在其中并利用OR 2.在数据库中创建一个表并在解析加载子小部件时保存数据并使用该数据调用函数发送文件

我想知道有没有更好的方法来解决它?如果我可以将单独的 listwidgetitem 详细信息发送到以某种方式存储的自定义子小部件并单击该项目,请获取所有详细信息并调用该函数来进行配对和发送文件?

请帮帮我。

谢谢

4

1 回答 1

0

首先: QListWidgetItem 没有 clicked() 信号。(它本身不是一个小部件)您应该连接到 QListWidget::itemClicked(QListWidgetItem*) - 如您所见,此信号为您提供已单击的特定项目。

当然,仅此一项对您没有帮助,因为 Item 不知道显示的数据。您应该使用 setData() 将信息存储在 QListWidgetItem 本身中,以便以后可以从 Item 中获取它。

但是由于您可能不想双重存储数据(一次在 myBTwidget 中,一次在 QListWidgetItem 中),您可以仅将数据存储在 QListWidgetItem 中,并将您的小部件重构为委托...

看看代表的文档,你会在那里找到一些例子。(我不确定代表是否可以毫无问题地使用QListWidget,使用带有 QStandardItemModel/自定义模型的QListView可能是更好的选择)

于 2013-11-12T10:03:08.820 回答