Subclassed QSpinBox不接受valueFromText

时间:2016-05-24 10:21:04

标签: c++ qt

我继承了QSpinBox(或者更确切地说是SpinBox,继承了QSpinBox),坚持this。此SpinBox显示十六进制值。通过按钮显示和递减工作正常,但不会输入任何值(跳回到上一个值)。我无法在任何覆盖函数的引用中找到该行为的提示:validate(QString &, int &) const : QValidator::StatevalueFromText(const QString &) const : inttextFromValue(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);
}

1 个答案:

答案 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包含前缀,但您的模式不包含。之后很容易注意到你在正则表达式范围内输了一个拼写错误。