c – 带有无符号Int的QSpinBox,用于十六进制输入

c – 带有无符号Int的QSpinBox,用于十六进制输入,第1张

概述这里有很多关于QSpinBox使用int作为其数据类型的限制的问题.通常人们想要显示更大的数字.在我的例子中,我希望能够以十六进制显示无符号的32位整数.这意味着我希望我的范围为[0x0,0xFFFFFFFF].普通QSpinBox可以达到的最大值是0x7FFFFFFF.在这里回答我自己的问题,我提出的解决方案是通过重新实现相关的显示和验证功能,简单地强制int被视为unsigned int. 结 这里有很多关于QSpinBox使用int作为其数据类型的限制的问题.通常人们想要显示更大的数字.在我的例子中,我希望能够以十六进制显示无符号的32位整数.这意味着我希望我的范围为[0x0,0xFFFFFFFF].普通QSpinBox可以达到的最大值是0x7FFFFFFF.在这里回答我自己的问题,我提出的解决方案是通过重新实现相关的显示和验证功能,简单地强制int被视为unsigned int.解决方法@H_502_5@ 结果很简单,效果很好.在这里分享以防其他人可以从中受益.它具有32位模式和16位模式.
class HexSpinBox : public QSpinBox{public:    HexSpinBox(bool only16Bits,QWidget *parent = 0) : QSpinBox(parent),m_only16Bits(only16Bits)    {        setPrefix("0x");        setdisplayIntegerBase(16);        if (only16Bits)            setRange(0,0xFFFF);        else            setRange(INT_MIN,INT_MAX);    }    unsigned int hexValue() const    {        return u(value());    }    voID setHexValue(unsigned int value)    {        setValue(i(value));    }protected:    QString textFromValue(int value) const    {        return QString::number(u(value),16).toupper();    }    int valueFromText(const QString &text) const    {        return i(text.toUInt(0,16));    }    qvalidator::State valIDate(QString &input,int &pos) const    {        QString copy(input);        if (copy.startsWith("0x"))            copy.remove(0,2);        pos -= copy.size() - copy.trimmed().size();        copy = copy.trimmed();        if (copy.isEmpty())            return qvalidator::Intermediate;        input = QString("0x") + copy.toupper();        bool okay;        unsigned int val = copy.toUInt(&okay,16);        if (!okay || (m_only16Bits && val > 0xFFFF))            return qvalidator::InvalID;        return qvalidator::Acceptable;    }private:    bool m_only16Bits;    inline unsigned int u(int i) const    {        return *reinterpret_cast<unsigned int *>(&i);    }    inline int i(unsigned int u) const    {        return *reinterpret_cast<int *>(&u);    }};
总结

以上是内存溢出为你收集整理的c – 带有无符号Int的QSpinBox,用于十六进制输入全部内容,希望文章能够帮你解决c – 带有无符号Int的QSpinBox,用于十六进制输入所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1256559.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存