QCheckListItem überall klickbar machen

Alles rund um die Programmierung mit Qt
Antworten
TheGrudge
Beiträge: 9
Registriert: 6. September 2007 23:12

QCheckListItem überall klickbar machen

Beitrag 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.
TheGrudge
Beiträge: 9
Registriert: 6. September 2007 23:12

Beitrag 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.
TheGrudge
Beiträge: 9
Registriert: 6. September 2007 23:12

Beitrag 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?
Antworten