检测QT QPlainTextEdit小部件的初始/输入点击

时间:2013-06-27 12:46:54

标签: qt keyboard

我想检测点击QPlainTextEdit小部件。最终目标是启动虚拟键盘小部件。顺便说一下,QPlainTextEdit小部件在QT ui文件中描述并由QUiLoader加载。我已经尝试为QPlainTextEdit小部件安装事件处理程序以捕获QEvent::FocusIn个事件。不幸的是,这个事件被反复触发,而不仅仅是一次。

注意:我使用的是QT 4.8。

更新 我找到了一个tutorial/example,它展示了如何为文本输入小部件启动软件输入面板。不幸的是,输入面板在打开后立即关闭。基本上,QEvent::CloseSoftwareInputPanel之后很快会触发事件QEvent::RequestSoftwareInputPanel

2 个答案:

答案 0 :(得分:0)

如果您只想检测鼠标按下事件,请在窗口小部件的viewport()窗口小部件上安装事件过滤器。有关详细信息,请参阅QAbstractScrollArea文档。

通常,FocusIn事件不得重复发生。可能是您为一个小部件多次调用了installEventFilter

可能你仍然可以使用FocusIn事件并以某种方式忽略重复事件。

答案 1 :(得分:0)

解决方案是触发QEvent::RequestSoftwareInputPanel事件(请参阅also

void InputPanel::saveFocusWidget(QWidget *oldFocus , QWidget *newFocus )
{
    // check if newFocus is not null or top-level widget or previous widget
    // check if newFocus is QPlainTextEdit 
    QEvent event( QEvent::RequestSoftwareInputPanel );
    QApplication::sendEvent( newFocus , &event );
}