找回密码
 立即注册
收起左侧

Qt Slider和SpinBox共用时遇到的问题

1
回复
9059
查看
[复制链接]
累计签到:10 天
连续签到:1 天
来源: 2018-3-29 17:17:44 显示全部楼层 |阅读模式
1Qter豆
      想在一个对话框上设置一个Slider一个SpinBox,两者数值同步变化,Slider的范围是-10~10,步长为1,SpinBox的范围是-1~1,步长为0.1,两个控件之间的值是十倍关系,现在的问题是两个控件之间能够互相控制,但是点击SpinBox增大按键的时候,0.7变0.8,Slider的数值却不变化,在点一下变0.9时,Slider也变成9了,减小正常,0.8变0.7,Slider也变化,减小SpinBox的数值,-0.7变-0.8时,也有同样的问题。输出debug信息后发现,0.7变0.8时Slider的值设置函数没被调用。
      另外出现了两个警告:
onecoreuap\shell\windows.storage\sharedstoragesources\util.cpp(6571)\windows.storage.dll!769A16F0: (caller: 769A15C7) ReturnHr(1) tid(1c64) 80004002
onecoreuap\inetcore\urlmon\zones\zoneidentifier.cxx(359)\urlmon.dll!6C846017: (caller: 6C846F48) ReturnHr(1) tid(1c64) 80070002

下面是我的代码:
sdlg->show();
sdlg->ui->sp_para_lbl->setText("BRIGHTNESS");
sdlg->ui->sp_valu_spb->setDecimals(1);

sdlg->ui->sp_valu_sld->setMaximum(10);
sdlg->ui->sp_valu_sld->setMinimum(-10);
sdlg->ui->sp_valu_sld->setPageStep(1);

sdlg->ui->sp_valu_spb->setMaximum(1);
sdlg->ui->sp_valu_spb->setMinimum(-1);
sdlg->ui->sp_valu_spb->setSingleStep(0.1);

void Guider::SpinBoxShowNum()
{
    int i  = sdlg->ui->sp_valu_sld->value();
    double d = (double)i / 10;
    sdlg->ui->sp_valu_spb->setValue(d);
}
void Guider::SliderShowNum()
{
    double d = sdlg->ui->sp_valu_spb->value();
    d = d * 10;
    sdlg->ui->sp_valu_sld->setValue(d);
}

connect(sdlg->ui->sp_valu_sld,SIGNAL(valueChanged(int)),this,SLOT(SpinBoxShowNum()));
connect(sdlg->ui->sp_valu_spb,SIGNAL(valueChanged(double)),this,SLOT(SliderShowNum()));

回复

使用道具 举报

累计签到:10 天
连续签到:1 天
2018-4-3 14:09:41 显示全部楼层
问题解决了,产生原因是隐式浮点数转换数据类型时因为精度差异造成的数据丢失
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了