我正在打开一个包含QLineEdit的QDialog。我希望QLineEdit最初具有键盘焦点,闪烁的光标作为视觉提示。简单,对吧?
调用line_edit->setFocus()
无效。
调用line_edit->grabKeyboard()
会给它输入焦点但是
line_edit
line_edit
如果我不这样做,我必须点击line_edit
以获得插入符号并输入焦点。查看QLineEdit::mousePressEvent
的源代码,似乎关键函数是QWidgetLineControl::moveCursor
,但是无法通过公共API访问并进一步深入到源代码中并没有显示出任何有希望的信息
那么如何移动该死的键盘输入光标?
答案 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()