Qt / C ++ - 带键的遍历菜单(非鼠标)

时间:2014-10-16 11:15:59

标签: c++ qt menu

我正在尝试使用控制器,但使用键盘和QT / C ++,在视频游戏菜单中看到你所看到的内容。

我不知道从哪里开始,因为我不知道这个词是什么,我不知道该搜索什么。无法在Google上找到任何内容。

我正在制作一个左/右/上/下选择项目的菜单。没有鼠标输入。

请问有人可以提供一个起点吗?

1 个答案:

答案 0 :(得分:0)

以下是处理按键操作的示例方法。

  • 假设类Widget是子类QWidget
  • _rows成员变量是菜单行数
  • _row成员变量是从0
  • 开始的当前选定的行索引
  • updateSelectedMenuItem()是一种执行任何操作以选择某个菜单项的方法,例如在屏幕上移动某些标记或更改颜色。

// overriding superclass method
void Widget::keyPressEvent(QKeyEvent *ev)
{
    switch(ev->key()) {
    case Qt::Key_Up:
        if (--_row < 0) _row = _rows-1;
        updateSelectedMenuItem();
        break;
    case Qt::Key_Down:
        if (++_row >= _rows) _row = 0;
        updateSelectedMenuItem();
        break;
    default:
        // call superclass event handler method
        QWidget::keyPressEvent(ev);
    }
    // Note: QKeyEvent starts with isAccepted() == true
}

请注意,这将依赖于正常的键盘重复,因此它的行为与在光标移动的任何普通应用程序中向上/向下按下时的行为相同。如果您想要不同的行为(例如,如果您正在控制游戏,而不是在菜单中移动),您还应该覆盖keyReleaseEvent,这样您就知道何时实际按下了键并再次释放。