【发布时间】:2022-02-18 02:09:41
【问题描述】:
我有一个带有按钮的表单,名为 "Up"、"Down" 等。
我需要处理键盘按钮(arrow_up、arrow_down 等)。同时我想为相关按钮设置焦点。
例如:如果我按下键盘上的arrow_down 按钮,那么"Down" 按钮将成为我表单上的焦点。
我的变种如何做到这一点:
bool ClientWindow::eventFilter(QObject *obj, QEvent *e)
{
if (event->type() == QEvent::KeyPress) {
QKeyEvent *event= dynamic_cast<QKeyEvent*>(e);
switch(event->key()) {
case Qt::Key_Up: ui->up->setFocus(); ;break;
case Qt::Key_Down: ui->down->setFocus(); break;
case Qt::Key_Left: ui->left->setFocus(); break;
case Qt::Key_Right: ui->right->setFocus(); break;
}
}
return QObject::eventFilter(obj, event);
}
但是,焦点没有设置,并且
1) 如果我从 eventFilter 返回 true,则不会设置焦点。
2) 如果我返回 QObject::eventFilter(obj, event) 那么焦点将转移到下一个对象。
如何为相关按钮设置焦点?
【问题讨论】:
-
欢迎来到 SO!我想我明白你在问什么,但请提供一个更完整的例子。什么是客户端窗口? (QObject)上的
eventFilter设置是什么......或者您是否在其自身上设置了一个过滤器(这不是这样做的方法)? ClientWindow 或过滤的对象或 UI 中可能窃取按键的其他任何位置(小部件/布局)是什么?如您所见,许多问题最好用一个完整(但最少)的例子来回答。焦点处理充其量可能有点棘手。