我继承了QSpinBox
(或者更确切地说是SpinBox
,继承了QSpinBox
),坚持this。此SpinBox显示十六进制值。通过按钮显示和递减工作正常,但不会输入任何值(跳回到上一个值)。我无法在任何覆盖函数的引用中找到该行为的提示:validate(QString &, int &) const : QValidator::State
,valueFromText(const QString &) const : int
和textFromValue(int) const : QString
这是我的实施:
#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 :(得分: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
包含前缀,但您的模式不包含。之后很容易注意到你在正则表达式范围内输了一个拼写错误。