1

我在将按键关联到QAction. 我正在映射Enter到这样的动作:

myAction->setShortcut(Qt::Key_Return);

问题是QAction当我在 a 中输入一个值QSpinBox然后按时也会触发Enter。我期待旋转框消耗事件(所以它不会被主窗口捕获)但它不是那样工作的。

我已经看到我可以为我的快捷方式添加一个上下文,我尝试了所有值,但这并不能解决我的问题。

@Matthew 它确实在拒绝该事件:

case Qt::Key_Enter:
case Qt::Key_Return:
    d->edit->d_func()->control->clearUndo();
    d->interpret(d->keyboardTracking ? AlwaysEmit : EmitIfChanged);
    selectAll();
    event->ignore();
    emit editingFinished();
    return;

我觉得这种行为很奇怪。

4

2 回答 2

1

据我所知,QSpinBox默认行为确实会等到您按下return接受该值。从技术上讲,一旦您更改它,该值就会被设置/接受。

如果您希望更改该行为,即当您点击returnQSpinBox的值时,该值实际上已设置/接受,那么您很可能必须自己处理相关的按键事件QSpinBox并将其标记为已接受(即event->accepted())。

否则,这听起来像它最初设计的那样工作,尽管不是你想要的。

于 2012-08-13T13:45:20.377 回答
0

我有完全相同的问题,只在 PyQt 和 QLineEdit

QActions 可能始终被视为菜单操作或全局操作,并且具有比 Widget 默认键更高的优先级。

我的“解决方案”是使用重要键(Return、Tab、Backspace 等)作为快捷方式创建我的操作的全局列表。

然后我连接到 QLineEdit focusInEvent 和 focusOutEvent。每次事件发生时,我都会遍历动作列表并在 focusIn 上将它们全部停用并在 focusOut 上再次激活它们。然后我将事件交给原始的焦点事件处理程序。

我真的希望有更好的解决方案。

于 2012-09-04T01:32:50.480 回答