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

相關文章
相關標籤/搜索