QTablewidget: Suche Signal wie columnSelect

Alles rund um die Programmierung mit Qt
Antworten
rubikon
Beiträge: 89
Registriert: 27. Mai 2010 13:23

QTablewidget: Suche Signal wie columnSelect

Beitrag von rubikon »

Hallo zusammen.

Ich habe ein QTablewidget. Bei diesem habe ich selectionMode auf SingleSelection und selectionBehavior auf SelectColumns.

Nun sollen die Spalten nur selektiert werden können, wenn ein Doppelklick ausgeführt wird nicht aber bei einem einfachen Kilck.

Deswegen habe ich editTriggers auf NoEditTriggers gesetzt und einen Eventfilter für den viewport meines TableWidgets installiert.

In diesem fange ich QEvent::MouseButtonPress ab (werte es anderweitig aus) beende die Funktion mit true und unterdrücke so die Selektierbarkeit einer Spalte mit einem Klick.

Nun zum eigentlichen Problem: Wenn nun eine Spalte (durch einen Doppelklick) selektiert wird (die Spalte ist dann grau hinterlegt), möchte ich darüber informiert werden um dann entsprechend reagieren zu können.

Ich habe mir die Signale von QTableWindget und dem dazugehörigen horzontalHeader angeschaut aber Nichts gefunden...

Wie kann ich das erreichen?

Vielen Dank
google
Beiträge: 15
Registriert: 1. November 2010 13:23

Beitrag von google »

ich glaub es gab ein Event MouseButtonDblKlick da einfach gucken ob dein Tablewidget auch gedrückt wurde und dann deinen funktion hinter fertig
rubikon
Beiträge: 89
Registriert: 27. Mai 2010 13:23

Beitrag von rubikon »

Oh, ich sehe gerade, dass ich meine Frage nicht vollständig gestellt habe :(

Ich möchte nicht nur darüber informiert werden dass eine Spalte selektiert worden ist, sondern auch welche Spalte selektiert worden ist...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

In der Doku zu QTableWidget gibt es imo genug Signals die Du benutzen kannst.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
rubikon
Beiträge: 89
Registriert: 27. Mai 2010 13:23

Beitrag von rubikon »

Christian81 hat geschrieben:In der Doku zu QTableWidget gibt es imo genug Signals die Du benutzen kannst.
Ähhhmmmm..... Wie ich bereits geschrieben habe, habe ich dort für meinen Fall nichts Passendes gefunden....

Sonst hätte ich hier nicht gepostet.
rubikon
Beiträge: 89
Registriert: 27. Mai 2010 13:23

Beitrag von rubikon »

*push*
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag von padreigh »

Die Lösung steht da doch schon:

den Mouse Double Klick Handler ...

in dem holst du dir den currentIndex deines Views und schmeisst den wieder als eigenes Signal los das ihn [= den Index] als parameter hat ... was ist daran so schwer?
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
rubikon
Beiträge: 89
Registriert: 27. Mai 2010 13:23

Beitrag von rubikon »

padreigh hat geschrieben:Die Lösung steht da doch schon:
Nö, tut sie nicht! Oder wo steht da schon was von currentIndex?
padreigh hat geschrieben: in dem holst du dir den currentIndex deines Views und schmeisst den wieder als eigenes Signal los das ihn [= den Index] als parameter hat ... ?
Das 'Problem' ist, dass ich so immer nur den 'alten' Index erhalte. Klicke ich z.B. auf Spalte 5 bekomme ich von currentIndex().column() im Handler den Wert -1. Klicke ich dann auf Spalte 4 bekomme ich den Wert 5... Also immer den vorherigen...
padreigh hat geschrieben: was ist daran so schwer?
Kann ich Dir erst sagen wenn das Problem gelöst.
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag von padreigh »

Und sie steht doch da ... der Hinweis auf "viele" Signale ... gucksdudoku:
void cellActivated ( int row, int column )
void cellChanged ( int row, int column )
void cellClicked ( int row, int column )
void cellDoubleClicked ( int row, int column ) // <<<<=====
void cellEntered ( int row, int column )
void cellPressed ( int row, int column )
void currentCellChanged ( int currentRow, int currentColumn, int previousRow, int previousColumn ) // <<<<=====
void currentItemChanged ( QTableWidgetItem * current, QTableWidgetItem * previous )
void itemActivated ( QTableWidgetItem * item )
void itemChanged ( QTableWidgetItem * item )
void itemClicked ( QTableWidgetItem * item )
void itemDoubleClicked ( QTableWidgetItem * item )// <<<<=====
void itemEntered ( QTableWidgetItem * item )
void itemPressed ( QTableWidgetItem * item )
void itemSelectionChanged ()
Was ist dann so schwer daran ein

Code: Alles auswählen

connect(meinTableWidget,SIGNAL(/*hierpasendes signal rein*/), this, SLOT(/*hier selbstgeschriebenen slot rein */));
zu machen ?

Insgesamt hat das Systemunterschiedliche Verhalten von Widgets einen Sinn ... Windowsuser sind gewöhnt alles antatschen zu können ohne das was passiert, wenn ich dann die Widgets so umbaue das die mit einem Klick statt doppelklick schon was machen höre ich schon jetzt die Supporthotlines klingeln. In Linux ists andersrum ... die werden warscheinlich aber eher darauf kommen auch einen Doppelklick zu machen (und sich ihren Teil dabei denken) aber die Anwendung geht dann trotzdem am normalen Feel (aka Look&Feel) vorbei
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
Antworten