【问题标题】:Subclassed QSpinBox does not take valueFromText子类 QSpinBox 不采用 valueFromText
【发布时间】:2016-05-25 02:09:19
【问题描述】:

我继承了QSpinBox(或者更确切地说是继承QSpinBoxSpinBox),坚持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);
}

【问题讨论】:

  • 插入后validate(QString, int)text的值是多少?
  • 验证时将打印任何字符串,但仅显示 0 - F 之间的值。两次,whysoever,但该值将是前一个(通过单击输入的任何值)值。
  • 不,我的意思是,调试器为text 提供什么值以及从validator-&gt;validate(text, pos); 返回什么状态?

标签: c++ qt


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    相关资源
    最近更新 更多