Программно перемещаясь по ListView в Qt (Ruby) - PullRequest
1 голос
/ 26 февраля 2009

Я создаю небольшой файловый браузер для собственного использования в Ruby и использую Qt для просмотра. Идея в том, что он окажется на моем телевизоре, где я смогу использовать пульт для перемещения вверх и вниз и запуска файлов.

Все работает нормально, пока я не собираюсь перемещать выделение с помощью пульта. Мне удалось настроить службу D-Bus, поэтому я просто вызову методы, используя LIRC.

Код, который я использую для настройки вида, выглядит следующим образом:

@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

И тогда я не уверен, как изменить выбор. Думаю, я пытался, чтобы все setIndex, setSelection и все методы, звучащие одинаково, в DirModel, ItemSelectionModel и ListView, без всякой удачи. Я гуглял и читал API, ничего не находя.

В идеале, я хотел бы иметь что-то вроде "moveSelectionDown" и "moveSelectionUp", которые позаботятся об этом и убедятся, что он правильно оборачивается. Но я не могу ничего найти.

Ответы [ 2 ]

1 голос
/ 28 февраля 2009

Удалось исправить это через ItemSelectionModel, очевидно, есть у каждого представления.

движется вверх:

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

или добавление одного для перемещения вниз

0 голосов
/ 26 февраля 2009

Я думаю, вы забыли, что вам нужно создать ModelIndex через вашу модель:

@dm.index(3, 0, None)

Я бы попробовал этот метод (хотя я не совсем уверен, это отменяет выбор других ячеек.)

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

Я не использовал Ruby целую вечность, поэтому я не совсем уверен, что есть None.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...