我subclassed QSpinBox
(或寧可SpinBox
,繼承QSpinBox
),堅持this。這個SpinBox顯示十六進制值。通過按鈕顯示和減少工作正常,但不會輸入任何值(跳回到先前的值)。我無法找到一個提示在任何的重寫功能的參考該行爲:validate(QString &, int &) const : QValidator::State
,valueFromText(const QString &) const : int
和textFromValue(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);
}
插入後'validate(QString,int)'中'text'的值是多少? –
驗證中將打印任何字符串,但只會顯示0 - F的值。無論如何,兩次,但值將是以前(通過點擊輸入的任何值)值。 – tobilocker
不,我的意思是,調試器爲'text'賦值以及從validator-> validate(text,pos)返回的狀態是什麼? –