Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 子类QSpinBox不接受valueFromText_C++_Qt - Fatal编程技术网

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)返回了什么状态