Qt之QSpinBox,QDoubleSpinBox及自定義QSpinBox

RGBMarco發表於2017-06-05

// QSpinBox
// setRange() //設定範圍
// setMaximum() //設定最大值
// setMinimum() //設定最小值
// setSingleSetp(int val) //設定singlesetp為val
// setPrefix() //設定字尾
// setWrapping() //數值可迴圈
// slots void setValue() //設定value
// singals valueChanged(int) valueChanged(QString)//值發生改變
// setSpecialValueText() //當數值超值範圍時顯示的特殊文字
// QDoubleSpinBox setDecimals()//設定顯示精度

public slots:
    void is_change(const int& value);
private:
    MySpinBox *mb;
class MySpinBox:public QSpinBox
{
    Q_OBJECT
public:
    explicit MySpinBox(QWidget* parent = 0):QSpinBox(parent){}
protected:
    virtual int valueFromText(const QString& text)const Q_DECL_OVERRIDE
    {
        QRegExp regexp(tr("(\\d+)(\\s*[x]\\s*\\d+)?"));
        if(regexp.exactMatch(text))
            return regexp.cap(1).toInt();
        else
            return 0;
    }
    virtual QString textFromValue(int value)const Q_DECL_OVERRIDE
    {
        return tr("%1 x %1").arg(value);
    }
};
#include "widget.h"
#include <QSpinBox>
#include <QDoubleSpinBox>
#include "MySpinBox.h"
#include <QDebug>
// QSpinBox
// setRange() //設定範圍
// setMaximum() //設定最大值
// setMinimum() //設定最小值
// setSingleSetp(int val) //設定singlesetp為val
// setPrefix() //設定字尾
// setWrapping() //數值可迴圈
// slots void setValue() //設定value
// singals valueChanged(int) valueChanged(QString)//值發生改變
// setSpecialValueText() //當數值超值範圍時顯示的特殊文字
//  QDoubleSpinBox setDecimals()
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    resize(600,600);
    QSpinBox *sb = new QSpinBox(this);
    sb->move(100,100);
    QDoubleSpinBox *dsb = new QDoubleSpinBox(this);
    dsb->move(100,150);
    sb->setRange(2,20);
    sb->setSingleStep(2);
    sb->setPrefix("$");
    sb->setSuffix("元");
    sb->resize(70,30);
    sb->setWrapping(true);
    sb->setSpecialValueText("Auto-Value");
    mb = new MySpinBox(this);
    mb->move(100,200);
    void (MySpinBox::*pf)(int) = &MySpinBox::valueChanged;
    QObject::connect(mb,pf,this,&Widget::is_change);
    dsb->setSuffix("$");
    dsb->setDecimals(4);
    dsb->setSingleStep(0.005);
}
void Widget::is_change(const int& value)
{
    qDebug() << "value changed to " << value << endl;
}

效果:
這裡寫圖片描述

相關文章