QTextEdit没法在Notify()函数响应

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

相关文章
相关标签/搜索