2013-03-09 18 views
7

Fondamentalmente, quello che ho è il seguente:QListWidget: Event articolo scatti

Un QListWidget, con alcuni elementi in esso come questo:

ListMail è il mio QListWidget. In questo QListWidget, ho elementi come: "Mail 1", "Mail 2", ...

E non ho idea, come posso fare un segnale su (per esempio) "Mail 1 "legare a uno slot (onClick) o qualcosa del genere.

Ho già provato cose come: connect(ui->listMail->selectedItems(0), SIGNAL(triggered()), this, SLOT(openMessage()), ma non funziona affatto ...

Qualsiasi aiuto?

Grazie!

risposta

7

È necessario eseguire il binding al segnale itemClicked. Il segnale fornirà un QListWidgetItem*, ovvero l'elemento su cui è stato fatto clic. È quindi possibile esaminare e verificare se è la prima:

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

Grazie mille! Ha funzionato come un fascino ! –

+1

Avrei dovuto anche spiegare perché il passaggio di un 'QListWidgetItem' a' connect' non ha funzionato: poiché non estende 'QObject' non può emettere segnali (o avere slot). – andref

+0

Non so perché ma per me (sto usando PyQt versione 5.7.1) 'itemClicked' non ha funzionato - nessun segnale è stato inviato. Ma quando si passa a 'itemPressed' non c'è stato nessun problema – sunyata

2

QListWidget ha un segnale QListWidget::itemPressed(QListWidgetItem *item) che vi dirà quale elemento è stato fatto clic. È possibile collegare questo segnale al proprio slot. Ci sono anche altri segnali correlati. Vedi lo documentation.

+0

Grazie a te! :) –