2013-03-09 12 views
7

Zasadniczo, co mam jest następujące:QListWidget: Event na pozycji kliknij

A QListWidget, z niektórych przedmiotów w to tak:

ListMail jest mój QListWidget. W tym QListWidget, mam elementy takie jak: "Mail 1", "Mail 2", ...

I nie mam pojęcia, jak mogę sygnał (na przykład) "Mail 1 "bindowanie do slota (onClick) lub coś w tym stylu.

Próbowałem już rzeczy jak: connect(ui->listMail->selectedItems(0), SIGNAL(triggered()), this, SLOT(openMessage()), ale to nie działa w ogóle ...

Każda pomoc?

Dzięki!

Odpowiedz

7

Musisz powiązać z sygnałem itemClicked. Sygnał zapewni Ci QListWidgetItem*, który został kliknięty. Następnie można zbadać i sprawdzić, czy jest to pierwsza:

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

Wielkie dzięki! To działało jak czar! –

+1

Należy również wyjaśnić, dlaczego przekazanie 'QListWidgetItem' do' connect' nie działa: ponieważ nie rozszerza 'QObject' nie może emitować sygnałów (lub mają gniazda). – andref

+0

Nie wiem dlaczego, ale dla mnie (używam PyQt w wersji 5.7.1) 'itemClicked' nie działa - nie wysłano żadnego sygnału. Ale przy zmianie na 'itemPressed' nie było problemu – sunyata

2

QListWidget ma sygnału QListWidget::itemPressed(QListWidgetItem *item) który powie ci, który element został kliknięty. Możesz podłączyć ten sygnał do własnego gniazda. Istnieją również inne powiązane sygnały. Zobacz documentation.

+0

Dzięki tobie! :) –

Powiązane problemy