1

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

注意:我使用的是 QT 4.8。

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

4

2 回答 2

0

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

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

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

于 2013-06-27T14:14:01.107 回答
0

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

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 );
}
于 2013-07-12T17:59:55.467 回答