QTreeView Items per Pfeiltaste selektieren

Alles rund um die Programmierung mit Qt
Antworten
law.skynet
Beiträge: 32
Registriert: 17. April 2007 23:01

QTreeView Items per Pfeiltaste selektieren

Beitrag von law.skynet »

hi,

ich habe wieder einmal ein kleines qtreeview problem.

ich habe 2 signale für meine qtreeview erstellt:

Code: Alles auswählen

connect(itemView, SIGNAL(clicked(const QModelIndex&)),
        SLOT(showInfos(const QModelIndex&)));

    connect(itemView, SIGNAL(activated(const QModelIndex&)),
        SLOT(showInfos(const QModelIndex&)));
also wenn ich jetzt ein item per maus anklicke, dann bekomme ich die infos, bzw. wenn ich per pfeiltaste herumfahre und danch return klicke.

gibt es nicht ein signal das nur schon per tastendruck (pfeiltasten) die daten aktualisiert?

patrick
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag von ArneStocker »

hi

ich glaube mit dem Signal''Activated' des QAbstractItemViews kommst du da nicht weiter. Um die Änderung der Selektion zu erfassen (egal ob mit Mausklick oder Pfeiltaste) müsstest Du auf ein Signal des SelectionsModels warten. Leider habe ich den Code jetzt nur für QtJambi/Java

Code: Alles auswählen

    itemView.selectionModel().selectionChanged.connect(this,"OnSelectionChanged()");
in c++ müsste es etwa so aussehen

Code: Alles auswählen

connect(itemView->selectionModel(), 
    SIGNAL(selectionChanged(const QModelIndex&,const QModelIndex&)),
    SLOT(showInfos(const QModelIndex&,const QModelIndex&)));
Gruß Arne
law.skynet
Beiträge: 32
Registriert: 17. April 2007 23:01

Beitrag von law.skynet »

danke erst mal.

aber irgendwie haut das nicht hin. ich bekomm immer den folgenden error:

Code: Alles auswählen

QObject::connect: Cannot connect (null)::currentChanged(const QModelIndex&, const QModelIndex&) to MainWindow::showMovieInfos(const QModelIndex&)
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag von ArneStocker »

void selectionChanged ( const QItemSelection & selected, const QItemSelection & deselected )

void currentChanged ( const QModelIndex & current, const QModelIndex & previous )
der Parameter für selectionChanged ist : QItemSelection und für currentChanged : QModelIndex

so stehts zumindest in der doku
gruß arne
law.skynet
Beiträge: 32
Registriert: 17. April 2007 23:01

Beitrag von law.skynet »

Code: Alles auswählen

connect(itemView->selectionModel(),
        SIGNAL(selectionChanged(const QItemSelection&,const QItemSelection&)),
        SLOT(showInfos(const QModelIndex&)));

ändert aber auch nicht viel. es kommt immer der selbe fehler...

oder verstehe ich da etwas falsch?
RD1978
Beiträge: 84
Registriert: 5. Juni 2007 08:00
Wohnort: Stralsund (DDR)

Beitrag von RD1978 »

Hi, wenn dann:

Code: Alles auswählen

connect( itemView->selectionModel(), SIGNAL( currentChanged( const QModelIndex&, const QModelIndex& ) ),
SLOT( showInfos( const QModelIndex& ) ) );
Parameter müssen vom gleichen Datentyp sein. Signale dürfen auch mehr Parameter haben wie Slots, aber nicht umgekehrt.

MfG RD1978
Zuletzt geändert von RD1978 am 25. Juni 2007 14:06, insgesamt 1-mal geändert.
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag von ArneStocker »

connect(itemView->selectionModel(),
SIGNAL(selectionChanged(const QItemSelection&,const QItemSelection&)),
SLOT(showInfos(const QModelIndex&)));
Du verwendest ja auch verschieden Typen in Signal und Slot. Probiers doch mal mit

Code: Alles auswählen

connect(itemView->selectionModel(),
        SIGNAL(selectionChanged(const QItemSelection&,const QItemSelection&)),
        SLOT(showInfos(const QItemSelection&)));
Gruß Arne

PS.: es kann sein, dass Du auch das SelectionsModel mal gegen NULL testen solltest. Ich weiss nicht genau, wann es eingerichtet wird, aber es könnte sein erst nach Verbinden des eigentlichen Model

Code: Alles auswählen

View->setModel(&IrgendEinModel)
law.skynet
Beiträge: 32
Registriert: 17. April 2007 23:01

Beitrag von law.skynet »

danke Arne!!!

das war der richtige gedankenanstoss :-)

setModel habe ich erst später aufgerufen!

wow es funktioniert. danke nochmal an alle.

grüsse
Antworten