我正在使用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详细信息发送到存储的自定义子窗口小部件并单击该项目,获取所有详细信息并调用该函数进行配对并发送文件??
请帮帮我。
谢谢
答案 0 :(得分:0)
首先:QListWidgetItem没有clicked()信号。 (它本身不是小部件) 您应该连接到QListWidget :: itemClicked(QListWidgetItem *) - 如您所见,此信号为您提供已单击的特定项目。
当然,仅此一项对您没有帮助,因为该项目并不知道所显示的数据。您应该使用setData()将信息存储在QListWidgetItem本身中,以便稍后可以从Item中获取它。
但是,由于您可能不希望双重存储数据(一次在myBTwidget中,一次在QListWidgetItem中),您只能将数据存储在QListWidgetItem中,并将您的窗口小部件重构为委托...
查看代表的文档,你会在那里找到一些问题。 (我不确定委托是否使用 QListWidget 而没有问题,使用带有QStandardItemModel /自定义模型的 QListView 可能是更好的选择)