主要是将常用的QSpinBox提升为一个十六进制的微调控件,原本的QSpinBox默认范围为0~99。不能满足一些特殊情况,首先重新写个HexSpinBox类。
hexspinbox.h
#ifndef HEXSPINBOX_H
#define HEXSPINBOX_H
#include <QMainWindow>
#include <QSpinBox>
class QRegExpValidator;
QT_BEGIN_NAMESPACE
namespace Ui { class HexSpinBox; }
QT_END_NAMESPACE
class HexSpinBox : public QSpinBox
{
Q_OBJECT
public:
HexSpinBox(QWidget *parent = nullptr);
~HexSpinBox();
protected:
//QValidator::validate()是验证的过程,返回结果是State。每当输入有变化时调用此方法。
//验证通不过 Invalid
//输入未完成,不确定是否能通过验证 Intermediate
//验证通过 Acceptable
QValidator::State validate(QString &text,int &pos)const;
int valueFromText(const QString &text)const;
QString textFromValue(int value) const;
private:
QRegExpValidator*validator;
Ui::HexSpinBox *ui;
};
#endif // HEXSPINBOX_H
hexspinbox.cpp
#include "hexspinbox.h"
#include <QtWidgets>
HexSpinBox::HexSpinBox(QWidget *parent)
: QSpinBox(parent)
{
setRange(0,255);
validator= new QRegExpValidator(QRegExp("[0-9A-Fa-f]{1,8}"));
}
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::~HexSpinBox()
{
}
然后在Qt设计师主界面中,添加QSpinBox控件,右键选择提升为。
运行结果: