QT/C++ +带键的遍历菜单(不是鼠标)

QT/C++ +带键的遍历菜单(不是鼠标),c++,qt,menu,C++,Qt,Menu,我试着用一个控制器,但用一个键盘和QT/C++来做你在视频游戏菜单中看到的事情 我不知道从哪里开始,因为我不知道这个词是什么,我不知道该搜索什么。在谷歌上找不到任何东西 我正在制作一个菜单,左/右/上/下选择项目。没有鼠标输入 有人能帮我确定一个起点吗?这是一个处理按键的示例方法 类Widget被假定为QWidget的子类 _rows成员变量是菜单行数 _行成员变量是当前选定的行索引,从0开始 updateSelectedMenuItem是一种方法,用于执行您想要执行的任何操作,以选择特定的菜单

我试着用一个控制器,但用一个键盘和QT/C++来做你在视频游戏菜单中看到的事情

我不知道从哪里开始,因为我不知道这个词是什么,我不知道该搜索什么。在谷歌上找不到任何东西

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


有人能帮我确定一个起点吗?

这是一个处理按键的示例方法

类Widget被假定为QWidget的子类 _rows成员变量是菜单行数 _行成员变量是当前选定的行索引,从0开始 updateSelectedMenuItem是一种方法,用于执行您想要执行的任何操作,以选择特定的菜单项,例如移动屏幕上的某些标记或更改颜色。 请注意,这将依赖于正常的键盘重复,因此其行为与在光标移动的任何正常应用程序中按下上/下键时相同。如果您想要不同的行为,例如,如果您正在控制一个游戏,而不是在菜单中移动,您还应该覆盖keyReleaseEvent,这样您就可以知道何时实际按下并再次释放按键。

在您的窗口覆盖方法中。在该方法中,检查event是否为event->type==QEvent::KeyPress,然后检查是否按下了任何光标键keyEvent->key==Qt::key\u Up,如果是,则执行您想对其执行的操作。
// 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
}