2009-02-25 10 views
1

Je crée un petit navigateur de fichiers pour mon propre usage, dans Ruby, et j'utilise Qt pour la vue. L'idée est que ça finira sur ma télé, où je peux utiliser la télécommande pour monter et descendre et lancer des fichiers.Déplacement par programme dans un ListView dans Qt (Ruby)

Tout fonctionne bien, jusqu'à ce que je vais déplacer la sélection en utilisant la télécommande. J'ai réussi à mettre en place un service D-Bus, je vais donc appeler les méthodes en utilisant LIRC.

Le code que je utilise pour la mise en place de la vue ressemble à ceci:

@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 

Et puis je ne suis pas sûr comment changer la sélection. Je pense que j'ai dû essayer tous les setIndex, setSelection et toutes les méthodes similaires, sur les DirModel, ItemSelectionModel et ListView, sans aucune chance. J'ai été googler et lire l'API sans rien trouver.

Idéalement, j'aurais quelque chose comme "moveSelectionDown" et "moveSelectionUp" qui s'en occuperait, et s'assurerait qu'il se déroule correctement. Mais je n'arrive pas à trouver quelque chose.

Répondre

1

Géré pour le réparer à travers le ItemSelectionModel que chaque vue a apparemment.

déplaçant vers le haut:

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

ou en ajoutant une à déplacer vers le bas

0

Je pense que vous oubliez que vous devez créer le ModelIndex par votre modèle: (. Bien que je ne suis pas vraiment sûr, ce désélectionne les autres cellules)

@dm.index(3, 0, None) 

Je vais essayer cette méthode

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

Je ne l'ai pas utilisé Ruby pour les âges, donc je ne suis pas exactement sûr qu'il ya None.