c++ - Qt/C++ - 用键遍历菜单(不是鼠标)

标签 c++ qt menu

我正在尝试执行您在使用 Controller 玩视频游戏菜单时看到的操作,但使用的是键盘和 QT/C++。

我不知道从哪里开始,因为我不知道术语是什么,所以我不知道要搜索什么。在 Google 上找不到任何内容。

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

请问有没有人能帮忙提供一个起点?

最佳答案

这是处理按键的示例方法。

  • 假定类 WidgetQWidget 的子类
  • _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,这样你就知道什么时候键被按下并再次释放。

关于c++ - Qt/C++ - 用键遍历菜单(不是鼠标),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26403037/

相关文章:

c++ - 不能 push_back vector 中的 unique_ptr

c++ - 阻止所有模板化派生类型的通用模板函数

c++ - C++ 中的 QHashIterator

c++ - 按下任何 QPushButton 时应用程序范围内的日志记录

c++ - 从另一个类调用 QQmlApplicationEngine 时的 TableView 和 QAbstracTableModel

c++ - srand() 范围不符合预期 C++

ios - 使用 objective-c 滑过菜单

html - 如何使用 flexbox 使菜单居中

c++ - QML TableView + QAbstractTableModel - 如何从 QML 编辑模型数据?

css - 简单的垂直多级菜单