2009-02-25 8 views
1

Ich mache einen kleinen Datei-Browser für mich selbst, in Ruby, und mit Qt für die Ansicht. Die Idee ist, dass es auf meinem Fernseher landen wird, wo ich mit der Fernbedienung auf und ab gehen und Dateien starten kann.Programmatisch durch eine ListView in Qt (Ruby) bewegen

Alles funktioniert gut, bis ich die Auswahl mit der Fernbedienung verschieben werde. Es ist mir gelungen, einen D-Bus-Dienst einzurichten, also rufe ich einfach die Methoden mit LIRC an.

Der Code Ich verwende für die Ansicht der Einrichtung sieht wie folgt aus:

@dm = Qt::DirModel.new 
@sm = Qt::ItemSelectionModel.new(@dm) 

@lv = Qt::ListView.new 
@lv.model = @dm 
@lv.selectionModel = @sm 

cwd = @dm.index(@dir) 
@lv.rootIndex = cwd 

Und dann unsicher bin ich, wie die Auswahl zu ändern. Ich denke, ich muss über jeden setIndex, setSelection und jede Methode, die ähnlich klingt, auf dem DirModel, ItemSelectionModel und ListView, ohne Glück versucht haben. Ich habe gegoogelt und durch die API gelesen, ohne etwas zu finden.

Idealerweise hätte ich etwas wie "moveSelectionDown" und "moveSelectionUp", das sich darum kümmert und sicherstellt, dass es korrekt umgebrochen wird. Aber ich kann nichts finden.

Antwort

1

Verwaltet, um es durch das ItemSelectionModel zu beheben, das anscheinend jede Ansicht hat.

nach oben bewegt:

curIndex = @lv.currentIndex 
@lv.selectionModel.setCurrentIndex(curIndex.sibling(curIndex.row-1, 0), Qt::ItemSelectionModel::ClearAndSelect) 

oder eine Zugabe nach unten zu bewegen

0

Ich glaube, Sie vergessen, dass Sie die ModelIndex durch Ihr Modell erstellen haben: (. Obwohl ich bin nicht wirklich sicher, das die anderen Zellen abgewählt)

@dm.index(3, 0, None) 

ich versuchen, diese Methode würde

@lv.setCurrentIndex(@dm.index(3, 0, None)) 

ich habe Rubin seit Ewigkeiten nicht mehr verwendet, so dass ich bin mir nicht ganz sicher, dass es None.