2013-03-09 9 views
7

Im Grunde, was ich habe, ist folgendes:QListWidget: Event zum Produkt klicken

A QListWidget, mit einigen Elementen in es wie folgt aus:

ListMail mein QListWidget ist. In diesem QListWidget, habe ich Elemente wie: "Mail 1", "Mail 2", ...

Und ich habe keine Ahnung, wie kann ich ein Signal auf (zum Beispiel) "Mail 1 "an einen Slot (onClick) oder etwas ähnliches binden.

ich schon versucht, Dinge wie: connect(ui->listMail->selectedItems(0), SIGNAL(triggered()), this, SLOT(openMessage()), aber es hat nicht funktioniert ...

Jede Hilfe?

Danke!

Antwort

7

Sie müssen an das Signal itemClicked binden. Das Signal wird Ihnen eine QListWidgetItem* geben, die das Element ist, auf das geklickt wurde. Sie können es dann untersuchen und prüfen, ob es die erste ist:

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

Vielen Dank! Es hat funktioniert wie ein Zauber! –

+1

Ich hätte auch erklären müssen, warum die Übergabe von 'QListWidgetItem' an' connect' nicht funktionierte: da QObject nicht erweitert wird, kann es keine Signale ausgeben (oder Slots haben). – andref

+0

Ich weiß nicht warum, aber für mich (ich benutze PyQt Version 5.7.1) 'itemClicked' hat nicht funktioniert - es wurde kein Signal gesendet. Aber beim Wechsel zu "itemPressed" gab es kein Problem – sunyata

2

QListWidget hat ein Signal QListWidget::itemPressed(QListWidgetItem *item), die Ihnen sagen, welches Element geklickt wurde. Sie können dieses Signal an Ihren eigenen Steckplatz anschließen. Es gibt auch andere verwandte Signale. Siehe die documentation.

+0

Danke an dich! :) –

Verwandte Themen