Seite 1 von 1

QCheckListItem überall klickbar machen

Verfasst: 5. Juli 2008 02:09
von TheGrudge
Hi,

ich versuche im Moment, ein QCheckListItem überall anklicken zu können, um seinen state zu togglen, so als würde ich in die kleine Checkbox klicken.

Natürlich habe ich erst einmal folgendes probiert:

Code: Alles auswählen

connect(this, SIGNAL(clicked(QListViewItem*)),
            this, SLOT(slotCheckListItemClicked(QListViewItem*)));
Also erst mal das clicked()-Signal der QListView mit einem slot verbunden, der den state toggled:

Code: Alles auswählen

void TAlbumListView::slotCheckListItemClicked(QListViewItem* item)
{
    if (!item)
        return;

    TAlbumCheckListItem* tagItem = dynamic_cast<TAlbumCheckListItem*>(item);
    tagItem->setOn(!tagItem->isOn());
}
Das funktioniert auch super, nur leider kann ich die Checkbox an sich nicht mehr anklicken, wahrscheinlich wird zweimal ein clicked()-Signal verarbeitet?

Oder mache ich einen viel simpleren Fehler, auf den ich einfach im Moment nicht komme? Hat jemand so etwas schon mal gemacht? Ich habe leider nichts hier im Forum oder bei Google gefunden.

Verfasst: 5. Juli 2008 02:11
von TheGrudge
Achja, nur nochmal zur Erklärung, vielleicht kam das nicht ganz gut herüber:

Ich will irgendwo hin klicken, sagen wir mal auf den Text des QCheckListItem, und der Status der dazugehörigen Checkbox soll sich verändern.

Verfasst: 5. Juli 2008 11:30
von TheGrudge
Ok also ich habe jetzt was über eventFilter gelesen und denke, das wäre die beste Lösung, oder? Wenn ich das richtig verstanden habe, muss ich das "click" Event abfangen, dann mein Widget entsprechend setzen und den Filter "true" zurück liefern lassen, um die anderen EventHandler auszuschließen.
Nun habe ich aber ein seltsames Problem: Wenn ich die Funktion in meinem QCheckListItem einbinde, bekomme ich immer wieder diese Fehlermeldung:
talbumlistview.cpp:169: error: expected unqualified-id before numeric constant
talbumlistview.cpp:169: error: expected `)' before numeric constant
*** Exited with status: 2 ***
Funktion:

Code: Alles auswählen

bool TAlbumCheckListItem::eventFilter(QObject* obj, QEvent* e)
{
    if ( e->type() == QEvent::KeyPress )
    {
        QKeyEvent *k = (QKeyEvent*)e;
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}
Es liegt wohl daran, das der Compiler QEvent::KeyPress nicht auflösen kann. Egal welche Header ich noch einbinde (qevent.h, qobject.h), es funktioniert einfach nicht. Was kann denn das Problem sein?