【发布时间】:2016-05-25 02:09:19
【问题描述】:
我继承了QSpinBox(或者更确切地说是继承QSpinBox的SpinBox),坚持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);
}
【问题讨论】:
-
插入后
validate(QString, int)中text的值是多少? -
验证时将打印任何字符串,但仅显示 0 - F 之间的值。两次,whysoever,但该值将是前一个(通过单击输入的任何值)值。
-
不,我的意思是,调试器为
text提供什么值以及从validator->validate(text, pos);返回什么状态?