Qt实现QSpinBox微调器和QSlider拖动条联合使用(显示小数)

Qt实现QSpinBox微调器和QSlider拖动条联合使用

QSpinBox和QSlider一起应用的场景非常多,而联合使用主要有两种情况,第一种情况也是最简单的情况QSpinBox和QSlider存的都是整型int,想要联合使用可以直接使用他自己的槽方法,而第二种情况是小数问题(QSpinBox和QSlider拖动条显示小数),这就会稍微复杂一些了,看下面的例子吧👇
第一种情况:QSpinBox和QSplider都为整型int

QSpinBox* m_pAttachSpinBox = new QSpinBox(this);
QSlider* m_pAttachSlider = new QSlider(this);
m_pAttachSpinBox->setMinimum(-15);//设置最小值
m_pAttachSpinBox->setMaximum(15);//设置最大值
m_pAttachSpinBox->setSingleStep(1);//设置步长
m_pAttachSlider->setOrientation(Qt::Horizontal); //水平方向的拖动条
m_pAttachSlider->setMinimum(-15);// 最小值
m_pAttachSlider->setMaximum(15);// 最大值
m_pAttachSlider->setSingleStep(1);// 设置步长

// 连接信号槽(相互改变)
connect(m_pAttachSpinBox, SIGNAL(valueChanged(int)), m_pAttachSlider, SLOT(setValue(int)));
connect(m_pAttachSlider, SIGNAL(valueChanged(int)), m_pAttachSpinBox, SLOT(setValue(int)));

运行效果:
在这里插入图片描述


第二种情况:QSpinBox和QSplider都为需要显示小数
在这就不能用QSpinBox了,因为QSpinBox只能显示整数,所以得选用QDoubleSpinBox,而QSlider也没有针对小数的槽方法,那就得采用放大缩小的思想,比如QDoubleSpinBox的范围是0.5-1.2,那么QSlider的范围就可以设置成5-12,当QDoubleSpinBox改变数值时,QSlider放大10倍在QSlider中显示,同理当QSlider数值改变时,那么QDoubleSpinBox则缩小10倍,这个槽方法就得自己实现了,在这我使用Lambda表达式写槽方法,看下面例子👇

QDoubleSpinBox* m_pMaSpinBox = new QDoubleSpinBox(this);
m_pMaSpinBox->setMinimum(0.5);   // 最小值
m_pMaSpinBox->setMaximum(1.2);   //最大值
m_pMaSpinBox->setSingleStep(0.1);//步长
QSlider* m_pMaSlider = new QSlider(this);
m_pMaSlider->setOrientation(Qt::Horizontal);// 水平方向
m_pMaSlider->setMinimum(5);     // 最小值
m_pMaSlider->setMaximum(12);    // 最大值
m_pMaSlider->setSingleStep(1);  // 步长
// 连接信号槽(相互改变)
connect(m_pMaSpinBox, static_cast<void(QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged), m_pMaSlider, [=](double v)
{
	//放大10倍在QSlider中显示
	m_pMaSlider->setValue(v * 10);
	
});
connect(m_pMaSlider, &QSlider::valueChanged, m_pMaSpinBox, [=](int v)
{
	//缩小10倍在QDoubleSpinBox中显示
	m_pMaSpinBox->setValue((double)v / 10);
});

运行效果:
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值