首页 文章

连接listwidgetitem点击customwidget按钮

提问于
浏览
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()插槽的childwidget按钮 . 通过这种方式,用户可以按下项目上的任何位置,设备对并发送文件 .

我该怎么做呢?

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

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

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

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

请帮帮我 .

谢谢

1 回答

  • 0

    首先:QListWidgetItem没有clicked()信号 . (它本身不是一个小部件)你应该连接到QListWidget :: itemClicked(QListWidgetItem *) - 正如你所看到的,这个信号为你提供了被点击的特定项目 .

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

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

    看看代表的文档,你会发现一些exaples . (我不确定委托是否可以使用QListWidget而没有问题,使用带有QStandardItemModel /自定义模型的QListView可能是更好的选择)

相关问题