需求:想要客制化一個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
沒有留言:
張貼留言