• QSpinBox 旋转框/微调按钮


    1、 QSpinBox 类是 QAbstractSpinBox 类的直接子类和具体实现,
    2、 QSpinBox 类被设计用于处理整数离散值集合,对于浮点值使用 QDoubleSpinBox 类实
    现(QDoubleSpinBox 类的函数与 QSpinBox 类是相同的。构造 QDoubleSpinBox 旋转框,其值为 0.0~99.99,步长为 1.0,小数位数为 2 位, 初始值为 0.00)。
    3、 QSpinBox 默认只支持整数值,但可通过其内部的成员函数进行扩展以支持使用不同的
    字符串

    3、 QSpinBox 类中的属性

    QSpinBox 类(属性速查表)
    属性名说明属性名说明
    cleanText获取文本(不包括前/后缀)prefix设置和获取
    displayIntegerBase设置和获取数值的基数suffix设置和获取
    maximum设置和获取最大值signleStep设置和获取步长
    minimum设置和获取最小值value设置和获取值

    ①、 cleanText: const QString 访问函数:

    QString cleanText() const;获取旋转框中的文本,不包括前缀、后缀及前后的空格。

    使用 QAbstractSpinBox::text属性可以获取包括前/后缀的文本。

    ②、 displayIntegerBase: int //qt5.2
    访问函数: int displayIntegerBase() const; void setDisplayIntegerBase(int);
    设置和获取旋转框中的值的基数(支持 2~36 进制),默认为 10(即 10 进制)
    ③、 maximum: int 访问函数: int maximum() const; void setMaximum(int);

    ④、 minimum: int 访问函数: int minimum() const; void setMinimum(int);
    以上两属性用于设置和获取旋转框中的最大值(默认为 99)和最小值(默认为 0)


    ⑤、 prefix: QString 访问函数: QString prefix() const; void setPrefix(const QString &);
    ⑥、 suffix: QString 访问函数: QString suffix() const; void setSuffix(const QString &);
     以上属性用于设置和获取旋转框的前缀(默认无前缀)和后缀(默认无后缀),见右图

              
     前/后缀位于显示的值的前/后面,常见用途是显示度量单位或货币的符号。
     设置空字符串可以关闭前/后缀,
     若未设置前/后缀则该属性是一个空字符串,
     若设置了 specialValueText 属性(特殊值文本),当显示的值为最小值时,不显示前
    /后缀,而显示特殊值文本。

    ⑦、 signleStep: int 访问函数: int signleStep() const; void setSignleStep(int);
    设置和获取旋转框步长值, 默认为 1,若该值设置为负数,则该函数不起作用。 可
    以重载虚函数stepBy()实现自已的策略。这里需说明QSpinBox实现的stepBy(int steps)
    虚函数的步长是 steps*signleStep,比如,若 signleStep 属性设置为 3,则调用 stepBy(4);
    将使值增加 12,可以这样理解, signleStep 才是步长,而 stepBy(4)表示将值增长 4 个
    步长的大小,同理 signleStep 属性还会影响到 stepUp()和 stepDown()函数,详见
    QAbstractSpinBox::StepUp()函数的讲解。

    ⑧、 value: int
    访问函数: int value() const; void setValue(int);
    信号: valueChanged(int);  void valueChanged(const QString &);
    获取和设置旋转框的值,若新值旧值不同,将发送 valueChanged 信号,该信号的
    QString 类型的形参,保存的值包括前缀和后缀。

    4、 QSpinBox 类中的函数
    ①、 QSpinBox(QWidget* parent = Q_NULLPTR); //构造函数
    构造一个旋转框,其值的范围是 0~99,步长为 1,初值为 0。

    ②、 void setRange( int min, int max);
    设置最大值和最小值,这是属性 maximum 和 minimum 便捷设置函数。

    ③、 virtual QString textFromValue( int value) const; //虚拟的,受保护的
    当需要显示给定的值 value 时,旋转框就会调用该虚函数,默认实现是返回一个字符
    串,且不会为 specialValueText 属性(特殊文本值)调用此函数,且返回值中没有前/后
    缀。若重新实现此函数,通常还需要重新实现 valueFromeText()和 validate()函数。

    ④、 virtual int valueFromText( const QString &text) const; //虚拟的,受保护的
    当需要将输入的文本 text 解释为值时,旋转框就会调用此虚函数,若以非数字形式显
    式旋转框中的值时,就需要重新实现此函数。 注意: specialValueText 属性(特殊文本
    值)不在此函数内处理。

    ⑤、 void valueChanged(int i); //信号
    void valueChanged(const QString &text); //信号
    只要旋转框的值发生变化就会发送以上信号,新值在 i 中传递。其中 text 是包含前/后缀的新值。

    1. //m.h 文件的内容
    2. #ifndef M_H
    3. #define M_H
    4. #include <QtWidgets>
    5. #include <iostream>
    6. using namespace std;
    7. class B :public QSpinBox {
    8. Q_OBJECT
    9. public: B(QWidget *p = 0) :QSpinBox(p) {}
    10. int j; //用于保存自定义的步长
    11. public slots:
    12. void setlong(int i) { j = i; } //使用该函数设置自定义的步长,可以为负值。
    13. //当激活微调按钮的上/下箭头时会自动调用该函数。Qt 会自动获取 s 的值,当点击旋转框的上箭头时 s=1,点击下箭头时s=-1。若按下的是 Page up 键,则 s=10,同理 Page down 时 s=-10
    14. void stepBy(int s) {
    15. QSpinBox::stepBy(s*j); //设置自定义的步长。
    16. }
    17. //当需要显示给定的值 value 时,会调用该函数
    18. QString textFromValue(int value) const {
    19. QVariant v = value; //Qt 会自动获取旋转框中输入的值。使用 QVariant 类,可方便的在各种类型之间进行转换
    20. QString s = "YY" + v.toString() + "XX"; //连接 YY 与 v 转换之后的字符串
    21. //cout<<s.toStdString()<<endl; //用于测试。
    22. return s; //字符串 s 会在旋转框中显示。
    23. }
    24. void f(QString t) { cout << t.toStdString() << endl; }//t 含有旋转框内的文本(包括前/后缀)
    25. };
    26. #endif // M_H
    27. //m.cpp 文件的内容
    28. #include "Header.h"
    29. int main(int argc, char *argv[]) {
    30. QApplication a(argc, argv);
    31. QWidget w;
    32. B *ps1 = new B(&w); ps1->resize(77, 22); ps1->move(22, 55);
    33. ps1->setRange(0, 1000000); //设置旋转框中的值的范围
    34. //描述当按下旋转框的“向上/向下”按钮一段时间不放时,是否会加快调整旋转框中数值 增加/减少 的速度。 默认为 false
    35. ps1->setAccelerated(1); //开启加速调整。
    36. ps1->setValue(11); //设置初始值为 11
    37. //特殊值文本是指, 当值等于最小值时旋转框显示这个特殊值文本而不显示数值
    38. ps1->setSpecialValueText("XXX"); //设置特殊文本值(即最小值时显示的文本)
    39. ps1->setWrapping(1); //开启调整值循环,即继续增长最大值时,循环至最小值。
    40. ps1->setPrefix("$"); //设置前缀
    41. ps1->setSuffix("%"); //设置后缀
    42. //ps1->setKeyboardTracking(false); //禁用键盘跟踪,默认为 true,该设置主要影响
    43. //valueChanged 信号的发送时机,读者可自行验证。
    44. /* ps1->setDisplayIntegerBase(16); 设置为 16 进制。设置该函数后,旋转框对值的显示会出问题,
    45. 因为重新实现的 textFromValue()函数,未对进制的显示进行处
    46. 理。 */
    47. ps1->setlong(-2); /*使用自定义的函数设置负值步长,设置后点击上箭头会使值减少,下箭头使值
    48. 增长。 */
    49. cout << ps1->cleanText().toStdString() << endl; //输出旋转框内的文本,不含前/后缀
    50. cout << ps1->text().toStdString() << endl;//输出旋转框内的文本,含前/后缀
    51. QObject::connect(ps1, SIGNAL(valueChanged(const QString)), ps1, SLOT(f(QString)));
    52. w.resize(300, 200); w.show(); return a.exec();
    53. }

    setSpecialValueText函数测试:

  • 相关阅读:
    【bug】uniapp的image组件渲染gif图,只有第一次点击的时候有动效,需要每次点击都有gif效果,已解决
    Linux(1):开始
    【SpringBoot高级篇】SpringBoot集成Mybatis实现多数据源配置+跨数据源事务
    Android 显示surfaceFlinger vsync 获取
    我的NVIDIA开发者之旅——优化显卡性能
    tf.while_loop
    使用NNI对DLASeg剪枝的失败记录
    Linux学习之:进程的控制
    cmd 与 npm是干什么的?为什么要使用npm?
    110. 平衡二叉树
  • 原文地址:https://blog.csdn.net/zxf347085420/article/details/132859772