Standard Objekt Signale aufheben

Alles rund um die Programmierung mit Qt
Antworten
snure
Beiträge: 14
Registriert: 4. November 2004 17:12

Standard Objekt Signale aufheben

Beitrag 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
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Schau Dir QObject::blockSignals() an
snure
Beiträge: 14
Registriert: 4. November 2004 17:12

Beitrag 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
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
snure
Beiträge: 14
Registriert: 4. November 2004 17:12

Beitrag 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
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Mh, aber dann habe ich dir die Lösung doch schon gesagt?

Lass 1 + 3 aus und mache, eine if Anweisung.
snure
Beiträge: 14
Registriert: 4. November 2004 17:12

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

???
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Ja, genau des wegen sollst du die Signale ja auch nicht deaktivieren(Schritt 1).
snure
Beiträge: 14
Registriert: 4. November 2004 17:12

Beitrag 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...
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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?
snure
Beiträge: 14
Registriert: 4. November 2004 17:12

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