Seite 1 von 1

Standard Objekt Signale aufheben

Verfasst: 16. Februar 2005 15:54
von snure
Hallo,

Ausgangssituation ist eine verzweigte ListView.
Nun ist es so, dass bei einer ListView bei einem Doppelklick auf ein ListViewItem das Kinder enthält, dieses erweitert (expanded) oder reduziert(collapsed ) wird.
Dieses Standard SIGNAL möchte ich gerne aufheben/löschen.
Leider funktioniert das mit dem disconnect-Befehlt nicht. Habe ich etwas übersehen?

Des Weiteren würde ich gerne wissen, ob ein Doppelklick auf ein deaktiviertes ListViewItem geblockt wird?
Und, ob man diesen Block evt. aufheben kann?

Vielen Dank für eine Antwort!
snure

Verfasst: 16. Februar 2005 17:07
von lepsai
Schau Dir QObject::blockSignals() an

Verfasst: 17. Februar 2005 18:56
von snure
Hi,

@lepsai
mit QObject::blockSignals() kann ich aber nur alle Signale blockieren oder alle Signale aktivieren.

Meine eigenen definierten Signale möchte ich aber aktivert lassen. Ich will nur das das Standard-Signal der ListView deaktivert wird.

@all
Hat vielleicht jemand eine Lösung für mein zweites Problem? Eine Reaktion auf ein Doppelklick auf ein deaktiviertes ListViewItem zu realisieren.

Ahoi

Verfasst: 18. Februar 2005 09:43
von FlorianBecker
1. Du willst Signale vom QListView blocken?
2. Ein Doppelklick SIGNAL?
3. Ein SIGNAL auf ein deaktiviertes (setEnabled(false)) ListViewItem?

Soweit alles richtig?

Dann lass 1 + 3 aus. Und in den Slot von dem Doppelklick:

Code: Alles auswählen

if ( item -> isEnabled() ) o.ä.
  tue was zu tun ist.
Ansonten mache bitte eine komplette Zusammenfassung.

Verfasst: 19. Februar 2005 12:43
von snure
Moin moin,

die drei oben angesprochenen Punkte sind soweit richtig.

Zum besseren Verständnis, erläutere ich noch mal die Situation.
Ich habe eine realtiv stark verzweigte ListView. Diese enthält auch mehrere deaktiverte Items. Nun möchte ich gerne eine Reaktion auf ein Doppelklick SIGNAL für ALLE Items realisieren. So weit so gut.

Das Hauptproblem liegt aber darin, das ein Doppelklick auf ein deaktiviertes QListViewItem ignoriert wird und zu keiner Ausführung der zugehörigen SLOT Funktion führt.
Ich möchte aber gerne die deaktivierten Items in meiner QListView aufrecht erhalten und trotzdem eine Reaktion auf einen Doppelklick auf diese Items realisieren.

Nun habe ich mir gedacht, das diese Doppelklicks auf die deaktivierten Items "geblockt" werden. Wenn ja, könnte man vielleicht diese Blocks irgendwie aufheben. Mit der Methode QObject::blockSignals() funktioniert das leider nicht.

Falls es doch keine Möglichkeit gibt das DoppelklickSIGNAL auf ein deaktivertes Item weiterzuleiten, müsste ich notgedrungen die deaktiverten Items wieder "enabled" setzen. Dann würde ja alles wunderbar funktionieren, fast :-). Jetzt würde aber, ein DoppelklickSIGNAL auf ein parentItem zum einen meine definierte SLOTFunktion aktiveren und zum anderen die "vordefinierte" expanded/collapsed Funktion ausführen.

Darum meine Frage, ob man dieses STANDARD ListView SIGNAL irgendwie aushebeln kann. Über disconnect geht das leider nicht.

Gruß
snure

Verfasst: 19. Februar 2005 13:13
von FlorianBecker
Mh, aber dann habe ich dir die Lösung doch schon gesagt?

Lass 1 + 3 aus und mache, eine if Anweisung.

Verfasst: 19. Februar 2005 14:53
von snure
Nach deinem Lösungsvorschlag soll ich den if-code.. in den Doppelklickslot einfügen. Aber der SLOT wird doch bei einem Doppelklick auf ein deaktiviertes QListViewItem gar nicht aufgerufen. Das bringt mir doch nix.
Oder übersehe ich jetzt was?

???

Verfasst: 19. Februar 2005 14:56
von FlorianBecker
Ja, genau des wegen sollst du die Signale ja auch nicht deaktivieren(Schritt 1).

Verfasst: 19. Februar 2005 15:32
von snure
Die Signale werden auch nicht von mir deaktiviert.

Es ist eine Standard Einstellung bei der QListView, das deaktivierte Items nicht mit einem Signal/Slot interagieren. Was ich wiederum ändern möchte...

Verfasst: 19. Februar 2005 15:58
von FlorianBecker
Achso, kapiert. Ja, klingt irgendwie logisch, dass wenn du ein Item disablest, dass es nicht mehr geht. Wo ist denn der Sinn? Du willst, dass es nicht geht, aber eigentlich willst du es doch?

Passt irgendwie nicht, oder? Dann disable es nicht, und hinterlege es grau oder was auch immer. Wie kommt es denn zu dem, dass du das Item nicht brauchst, aber trotzdem Signale davon verwenden willst?

Ich habe das gerade probiert.

Code: Alles auswählen

QListViewItem *item blah
item -> setEnabled( false );
verbunden über mein eigenes Signal, das Problem ist nicht, dass das SIGNAL nicht mehr geht, du kannst es nicht mehr anklicken, also müsstest du wohl, eines der events implementieren, die eben für das disablen zuständig sind und nur grau hinterlegen, clickFocus aber zulassen.

Aber ich würde trotzdem gerne einmal wissen, was der Sinn davon ist/sein könnte?

Verfasst: 19. Februar 2005 17:02
von snure
Da hast du recht. Eigentlich wiederspricht sich das Ganze. Ich wollte mich vor einer Reimplementierung oder um eine Anpassung per grau-einfärben,... mittels "(re-)aktivieren-Befehl" drücken.

Natürlich ist der von dir vorgeschlagene Weg der bessere. Den werde ich jetzt auch nehmen. :-)

Danke!