2013-03-09 1822 views
7

基本上,我有如下:QListWidget:对项目事件单击

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

ListMail是我QListWidget。在这个QListWidget,我有这样的元素:“邮件1”,“邮件2”,... ...

而我不知道,我怎么能做一个信号(例如)“邮件1 “绑定到一个插槽(onClick)或类似的东西。

我已经尝试过的东西,如: connect(ui->listMail->selectedItems(0), SIGNAL(triggered()), this, SLOT(openMessage()),但它并没有在所有的工作......

任何帮助吗?

谢谢!

回答

7

您必须绑定到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. 
    } 
} 
+0

非常感谢!它像一个魅力一样工作! – 2013-03-09 13:58:10

+1

我应该也解释了为什么传递'QListWidgetItem'到'connect'不起作用:因为它不扩展'QObject'它不能发射信号(或有插槽)。 – andref 2013-03-11 12:33:03

+0

我不知道为什么,但对我来说(我正在使用PyQt版本5.7.1)'itemClicked'没有工作 - 没有信号发送。但是,当更改为'itemPressed'时,没有问题 – sunyata 2017-02-09 23:16:46

2

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

+0

感谢你! :) – 2013-03-09 13:58:27