2016-05-24 23 views
0

我subclassed QSpinBox(或寧可SpinBox,繼承QSpinBox),堅持this。這個SpinBox顯示十六進制值。通過按鈕顯示和減少工作正常,但不會輸入任何值(跳回到先前的值)。我無法找到一個提示在任何的重寫功能的參考該行爲:validate(QString &, int &) const : QValidator::StatevalueFromText(const QString &) const : inttextFromValue(int) const : QString子類別QSpinBox不採取價值從文本

這是我實現:

#include "hexspinbox.h" 

#include <QtGui> 
#include <QRegExp> 
#include <QRegExpValidator> 

HexSpinBox::HexSpinBox(const QString& define, const QString& header, const QPoint& topLeft, const QSize& size, const QString& defaultValue, const QPoint& range, QWidget* parent) 
    : SpinBox(define, header, topLeft, size, defaultValue, range, parent) 
{ 
    if (!size.isEmpty()) 
     setFixedSize(size); 
    if (!topLeft.isNull()) 
     move(topLeft); 
    if (!range.isNull()) 
     setRange(range.x(), range.y()); 
    validator = new QRegExpValidator(QRegExp("[0-9A-Fa-f]{1-8}"), this); 
    setPrefix("0x"); 
    init(); 
} 

QValidator::State HexSpinBox::validate(QString& text, int& pos) const 
{ 
    return validator->validate(text, pos); 
} 

QString HexSpinBox::textFromValue(int value) const 
{ 
    return QString::number(value, 16).toUpper(); 
} 

int HexSpinBox::valueFromText(const QString& text) const 
{ 
    bool ok; 
    return text.toInt(&ok, 16); 
} 
+0

插入後'validate(QString,int)'中'text'的值是多少? –

+0

驗證中將打印任何字符串,但只會顯示0 - F的值。無論如何,兩次,但值將是以前(通過點擊輸入的任何值)值。 – tobilocker

+0

不,我的意思是,調試器爲'text'賦值以及從validator-> validate(text,pos)返回的狀態是什麼? –

回答

0

validator = new QRegExpValidator(QRegExp("[0-9A-Fa-f]{1-8}"), this);

應該

validator = new QRegExpValidator(QRegExp("0x[0-9A-Fa-f]{1,8}"), this);

請注意0x,而不是-text包含前綴,但您的模式不包含。之後,很容易注意到你在正則表達式中犯了一個錯字。

+0

確實如此 - 只是一個錯字。感謝您指出。 – tobilocker