QListWidget:项目点击事件

Posted

技术标签:

【中文标题】QListWidget:项目点击事件【英文标题】:QListWidget : Event on item click 【发布时间】:2013-03-09 13:31:43 【问题描述】:

基本上,我拥有的是以下内容:

一个 QListWidget,里面有一些像这样的项目:

ListMail 是我的 QListWidget。 在这个 QListWidget 中,我有如下元素:“Mail 1”、“Mail 2”、...

我不知道,如何在(例如)“Mail 1”上发出信号,绑定到插槽(onClick)或类似的东西。

我已经尝试过类似的方法: connect(ui->listMail->selectedItems(0), SIGNAL(triggered()), this, SLOT(openMessage()),但是根本不行……

有什么帮助吗?

谢谢!

【问题讨论】:

【参考方案1】:

您必须绑定到itemClicked 信号。该信号将为您提供QListWidgetItem*,这是被点击的项目。然后您可以检查它并检查它是否是第一个:

MyClass::MyClass(QWidget* parent)
    : QWidget(parent)

    connect(ui->listMail, SIGNAL(itemClicked(QListWidgetItem*)), 
            this, SLOT(onListMailItemClicked(QListWidgetItem*)));


void MyClass::onListMailItemClicked(QListWidgetItem* item)

    if (ui->listMail->item(0) == item) 
        // This is the first item.
    

【讨论】:

我还应该解释为什么将QListWidgetItem 传递给connect 不起作用:因为它没有扩展QObject,它不能发出信号(或有槽)。 我不知道为什么,但对我来说(我使用的是 PyQt 版本 5.7.1)itemClicked 不起作用 - 没有发送信号。但是改成itemPressed就没有问题了 @sunyata 您可能在使用触摸界面? @andref 您会这么认为,但不,我在笔记本电脑上运行 Lubuntu 16.04 LTS,并且我使用了 USB 鼠标(也尝试使用触摸板下方的左键单击按钮)。但是有一些奇怪的行为,因为有时当我点击发送信号 is 时,这种情况可能只发生十分之一。无论如何,我只是想在这里发布这个,以防其他人遇到同样的事情【参考方案2】:

QListWidget 有一个信号QListWidget::itemPressed(QListWidgetItem *item),它会告诉你哪个项目被点击了。您可以将此信号连接到您自己的插槽。还有其他相关信号。请参阅documentation。

【讨论】:

以上是关于QListWidget:项目点击事件的主要内容,如果未能解决你的问题,请参考以下文章

pyqt5的QListWidget中设置右键菜单

处理 RecyclerView 项目的点击事件和项目内按钮的点击事件。避免同时听两者

点击事件后jQuery调用点击事件

android项目多个返回按钮点击事件怎样用一个方法解决

jQuery UI Sortable -- 如何取消拖动/排序项目的点击事件?

qt QListWidget 添加鼠标移动事件(mouseMoveEvent),让父窗体可以监听到鼠标移动