2008年12月19日 星期五

Qt - QLineEdit and focusInEvent

需求:想要客制化一個QLineEdit,希望在點選這個widget時,其text裡的內容全部反白(selectAll 的動作),

第一個想到clicked()這個signal,不過沒有...


然後試試 focusInEvent 的 virtual function,大概如下:

void HexEdit::focusInEvent(QFocusEvent * event)
{
    QLineEdit::focusInEvent(event);
    selectAll();    
}

結果還是不行,因為雖然有反白全部的內容,但在處理完focusInEvent後,應該會再處理mouse的event,所以等於在已經反白內容的QLineEdit上,點選,所以結果是沒有反白


最後試試bool eventFilter( QObject *target, QEvent *event ) 這個virtual function,加上installEventFilter(QObject *filterObj) 這個function,來抓 MouseButtonRelease 或 MouseButtonPress  的event,成功

HexEdit::HexEdit()
{
    installEventFilter( this );    
}

bool HexEdit::eventFilter( QObject *target, QEvent *event )
{
    if( event->type() == QEvent::MouseButtonRelease)
    {
        selectAll();
        return true;
    }
    return false;
}

過程中發現,其實用tab來切換focus到QLineEdit,其內容就會全部反白

Qt版本 4.4.3
相關資料
http://lists.trolltech.com/qt-interest/2004-07/thread01290-0.html
http://lists.trolltech.com/qt-interest/2007-01/thread00657-0.html

沒有留言:

張貼留言