在處理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();
}
}
}
}
}函數