如何将键盘光标/焦点移动到QLineEdit?

时间:2016-03-03 03:50:58

标签: qt

我正在打开一个包含QLineEdit的QDialog。我希望QLineEdit最初具有键盘焦点,闪烁的光标作为视觉提示。简单,对吧?

调用line_edit->setFocus()无效。

调用line_edit->grabKeyboard()会给它输入焦点但是

  • 闪烁的插入符号未移至line_edit
  • 如果我点击不同的QLineEdit,闪烁的插入符号那里但是按键仍然传递给line_edit

如果我不这样做,我必须点击line_edit以获得插入符号并输入焦点。查看QLineEdit::mousePressEvent的源代码,似乎关键函数是QWidgetLineControl::moveCursor,但是无法通过公共API访问并进一步深入到源代码中并没有显示出任何有希望的信息

那么如何移动该死的键盘输入光标?

2 个答案:

答案 0 :(得分:1)

  

如何将键盘输入光标设置为QLineEdit小部件?

来自对该主题的回复之一:Set QLineEdit focus in Qt

QTimer::singleShot(0, line_edit, SLOT(setFocus()));

在我找到优雅的设定焦点之前,我开发了自己的方法:

void forceFocus(QWidget* widget)
{
    // unless set active, no stable set focus here
    widget->activateWindow();
    // the event object is released then in event loop (?)
    QFocusEvent* eventFocus = new QFocusEvent(QEvent::FocusIn);
    // posting event for forcing the focus with low priority
    qApp->postEvent(widget, (QEvent *)eventFocus, Qt::LowEventPriority);
}

答案 1 :(得分:0)

接受的答案对我不起作用。 qApp->focusWidget()已正确更新,但插入符号未显示。我对grabKeyboard()setReadOnly()setCursorPosition()activateWindow()cursorBackward()cursorForward(),{{1}等内容进行了大量修改。等等,但无济于事。他们发现光标位于正确的位置,只是没有画出来。

不确定我的情景与OP有何不同。就像在Activate cursor in QTextEdit中我在响应另一个按钮按下后调用cursorFlashTime(),但是非常标准。

最后,利用OP中的线索,这个大锤的方法让我在那里:

setFocus()