我想检测点击QPlainTextEdit
小部件。最终目标是启动虚拟键盘小部件。顺便说一下,QPlainTextEdit
小部件在QT ui文件中描述并由QUiLoader
加载。我已经尝试为QPlainTextEdit
小部件安装事件处理程序以捕获QEvent::FocusIn
个事件。不幸的是,这个事件被反复触发,而不仅仅是一次。
注意:我使用的是QT 4.8。
更新
我找到了一个tutorial/example,它展示了如何为文本输入小部件启动软件输入面板。不幸的是,输入面板在打开后立即关闭。基本上,QEvent::CloseSoftwareInputPanel
之后很快会触发事件QEvent::RequestSoftwareInputPanel
。
答案 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 );
}