在处理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();
}
}
}
}
}函数