C++ 子类QSpinBox不接受valueFromText
我将一个C++ 子类QSpinBox不接受valueFromText,c++,qt,C++,Qt,我将一个QSpinBox(或者更确切地说是一个继承QSpinBox)的QSpinBox)子类化,并坚持。此微调框显示十六进制值。通过按钮进行显示和递减工作正常,但不接受任何输入值(跳回到上一个值)。我在任何重写函数的引用中都找不到该行为的提示:,和 以下是我的实现: #include "hexspinbox.h" #include <QtGui> #include <QRegExp> #include <QRegExpValidator> HexSpinB
QSpinBox
(或者更确切地说是一个继承QSpinBox
)的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);
}
#包括“hexspinbox.h”
#包括
#包括
#包括
HexSpinBox::HexSpinBox(常量QString和定义、常量QString和标题、常量QPoint和左上角、常量QSize和大小、常量QString和默认值、常量QPoint和范围、QWidget*父项)
:微调框(定义、标题、左上角、大小、默认值、范围、父项)
{
如果(!size.isEmpty())
设置固定大小(大小);
如果(!topLeft.isNull())
移动(左上角);
如果(!range.isNull())
setRange(range.x(),range.y());
validator=新的QRegExpValidator(QRegExp(“[0-9A-Fa-f]{1-8}”),这个);
设置前缀(“0x”);
init();
}
QValidator::State HexSpinBox::validate(QString&text,int&pos)常量
{
返回验证程序->验证(文本,pos);
}
QString HexSpinBox::textFromValue(int值)常量
{
返回QString::number(值,16).toUpper();
}
int HexSpinBox::valueFromText(常量QString&text)常量
{
布尔ok;
返回text.toInt(&ok,16);
}
validator=新的QRegExpValidator(QRegExp(“[0-9A-Fa-f]{1-8}”),这是一个新的验证程序代码>
应该是
validator=新的QRegExpValidator(QRegExp(“0x[0-9A-Fa-f]{1,8}”),这个)代码>
注意0x
和,
而不是-
<代码>文本
包含前缀,但您的模式不包含前缀。之后,很容易注意到您在regex范围内输入了一个错误。validator=new QRegExpValidator(QRegExp(“[0-9A-Fa-f]{1-8}”),这是一个错误代码>
应该是
validator=新的QRegExpValidator(QRegExp(“0x[0-9A-Fa-f]{1,8}”),这个)代码>
注意0x
和,
而不是-
<代码>文本
包含前缀,但您的模式不包含前缀。之后,很容易注意到您在regex范围内输入了一个错误。插入后,validate(QString,int)
中的text的值是多少?在validate中,将打印任何字符串,但仅显示0-F的值。两次,为什么如此,但该值将是以前的值(通过单击输入的任何值)。不,我的意思是,调试器为text
提供了什么值,以及从validator->validate(text,pos)返回了什么状态代码>?插入后,validate(QString,int)
中的text
值是多少?在validate中,将打印任何字符串,但仅显示0-F中的值。两次,为什么如此,但该值将是以前的值(通过单击输入的任何值)。不,我的意思是,调试器为text
提供了什么值,以及从validator->validate(text,pos)返回了什么状态代码>?