Qt设计师-提升法(自定义部件)“提升为”

    科技2025-09-14  17

    主要是将常用的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控件,右键选择提升为。

    运行结果:

    Processed: 0.009, SQL: 8