2011-10-20 86 views
1

我有一個QLineEdit,用戶可以使用鍵盤輸入。 行編輯只能接受十六進制字符。 行編輯必須自動在每兩個十六進制字符集之間放置一個分隔符 當用戶刪除最後一個十六進制字符時,應自動刪除最後一個分隔符。Qt inputMask和QValidator QLineEdit(十六進制驗證)

我試過這個: ui-> mTextEdit-> setInputMask(「Hh,hh,hh,hh,hh」);

但不幸的是,所有的逗號都是在沒有文本的情況下顯示的,而且您必須事先知道需要多少組十六進制數(我不知道/不能限制)。

我可以使用QValidator爲我做這個嗎?

回答

4

您可以使用QValidator的自定義子類和validate()像這樣:

QValidator::State HexValidator::validate(QString &input, int &pos) const 
{ 
    // remove trailing comma 
    if (input.endsWith(',')) { 
     input.chop(1); 
    } 

    // insert comma when third hex in a row was entered 
    QRegExp rxThreeHexAtTheEnd("(?:[0-9a-fA-F]{2},)*[0-9a-fA-F]{3}"); 
    if (rxThreeHexAtTheEnd.exactMatch(input)) { 
     input.insert(input.length()-1, ','); 
     pos = input.length(); 
    } 

    // match against needed regexp 
    QRegExp rx("(?:[0-9a-fA-F]{2},)*[0-9a-fA-F]{0,2}"); 
    if (rx.exactMatch(input)) { 
     return QValidator::Acceptable; 
    } 
    return QValidator::Invalid; 
} 
+0

謝謝!但是,當將驗證器應用於輸入字段時,我無法使用粘貼命令(Ctrl V)。我只能手動輸入字符。 – aviit