在处理Notify()函数时,QTextEdit类不响应MouseButtonPress事件,究其原因是因为该类继承自QScrollArea类,其内部的编辑窗口是父类的viewport()指向的窗口而不是其自身窗口,因此应当为viewport()窗口过滤事件而不是QTextEdit窗口。下面使用反向推到QTextEdit的方法对其进行处理,实验证明该方法可行。
bool RtApplication::notify(QObject *obj, QEvent *evt) { if (QEvent::MouseButtonRelease == evt->type()) { if (obj->inherits("QWidget")) //处理viewport()窗口事件 { //对QTextEdit响应软键盘的特殊处理 QWidget* widget = qobject_cast<QWidget*>(obj); QWidget* parentWidget = widget->parentWidget(); if (parentWidget!=NULL && parentWidget->inherits("QTextEdit")) { QTextEdit* text = qobject_cast<QTextEdit*>(parentWidget); if (text->isEnabled() && !text->isReadOnly()) { bCallKeyboard = true; RtHandWrite::instance()->callHandWrite(); } } } } }