连接listwidgetitem点击customwidget按钮

时间:2013-11-08 14:07:04

标签: qt bluetooth signals-slots qlistwidget custom-widgets

我正在使用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()插槽的childwidget按钮。通过这种方式,用户可以按下项目上的任何位置,设备对并发送文件。

我该怎么做?

listwidget位于父类中,该项是子窗口小部件。我尝试将qlistwidgetitem的点击信号连接到插槽onitemclicked()。在onitemclicked()函数中,我尝试在自定义childwidget中调用实现按钮单击函数的函数,但由于它不具有设备名称,地址,通道等细节,因此无法执行操作。

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

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

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

请帮帮我。

谢谢

1 个答案:

答案 0 :(得分:0)

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

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

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

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