Qt 我应该使用KeyPressEvent或QAction来实现按键操作吗?
在Qt中,无论是实现keyPressEvent还是创建QAction并为其分配组合键,都允许我根据键盘进行操作Qt 我应该使用KeyPressEvent或QAction来实现按键操作吗?,qt,keyboard,keyboard-events,Qt,Keyboard,Keyboard Events,在Qt中,无论是实现keyPressEvent还是创建QAction并为其分配组合键,都允许我根据键盘进行操作 以下哪种方法通常是首选的 将取决于您需要它做什么 这是一个类似于菜单的动作,它也可能由菜单、按钮、工具栏触发,然后进行QAction。尤其是如果此操作应该在整个程序中都有效,而不仅仅是在单个小部件中 它是否更像单个小部件中的本地活动(例如控制游戏中的移动),我会使用按键事件。我更喜欢覆盖按键事件。我不喜欢那种“到处乱跑”的想法。只需覆盖键,然后按edevent。我通常用开关盒检查按下的
以下哪种方法通常是首选的 将取决于您需要它做什么 这是一个类似于菜单的动作,它也可能由菜单、按钮、工具栏触发,然后进行QAction。尤其是如果此操作应该在整个程序中都有效,而不仅仅是在单个小部件中
它是否更像单个小部件中的本地活动(例如控制游戏中的移动),我会使用按键事件。我更喜欢覆盖
按键事件。我不喜欢那种“到处乱跑”的想法。只需覆盖键,然后按edevent
。我通常用开关盒检查按下的键。如果不想禁用密钥的标准行为,请不要忘记调用基类的keyPressEvent。此外,您还可以检查在发生按键事件时是否按下了“修改器”。(例如Shift或Ctrl)。IMHO在一般情况下覆盖按键事件比创建不可见的秘密操作要好,除非您希望应用程序包含所有用户可见的操作
void my_widget::keyPressEvent( QKeyEvent* p_event )
{
bool ctrl_pressed = false;
if( p_event->modifiers() == Qt::ControlModifier )
{
ctrl_pressed = true;
}
switch( p_event->key() )
{
case Qt::Key_F:
focus_view();
break;
case Qt::Key_I:
if( ctrl_pressed )
{
toggle_interface();
}
else
{
QWidget::keyPressEvent( p_event );
}
break;
case Qt::Key_Return: // return key
case Qt::Key_Enter: // numpad enter key
update_something();
break;
default:
QSpinBox::keyPressEvent( p_event );
}
}
只要通过菜单、工具栏或其他按钮等其他方式触发所需按键序列触发的同一事件,就应该使用QAction。通过这种方式,您可以在几个小部件上使用相同的操作,这些小部件应该执行相同的操作
摘录自:
QAction类提供了一个抽象
用户界面操作可以是
插入到小部件中
在应用程序中,有许多常用命令
可以通过菜单、工具栏按钮和
键盘快捷键。因为用户
期望执行每个命令
以同样的方式,不管
使用的用户界面,有助于
将每个命令表示为一个操作
此外,QAction可以更轻松地覆盖要在运行时使用的键组合。当然,使用其他方法也可以实现这一点,但难度更大。