项目场景:
项目场景:最近写了个Dialog界面,其中有两个SpinBox控件,监测SpinBox值变化时,重新执行计算,锁定了键盘输入,只响应键盘上下键和回车,但点击回车总是执行的清空数据方法。
问题描述
最近写了个Dialog界面,其中有两个SpinBox控件,监测SpinBox值变化时,重新执行计算,锁定了键盘输入,只响应键盘上下键和回车,但点击回车总是执行的清空数据的方法。
@Override
ui->designStepDoubleSpinBox->setKeyboardTracking(false);
connect(ui->designStepDoubleSpinBox, SIGNAL(valueChanged(double)),
this, SLOT(SlotCheckStepChanged()));
界面如下:
原因分析:
因为pushButton 默认为StrongFocus,然后回车键会默认执行界面上有Focus的控件的槽函数,也就是选择区域和绘制区域都会清空界面的LineEdit。
如图:
解决方案:
将pushbutton 以及其他所有控件(包括窗体)设为NoFocus,将SpinBox设为TabFocus; TabFocus可以用Tab建实现两个SpinBox之间切换;当焦点处于某个SpinBox上时,点击回车将执行对应的信号和槽函数;
如图:
总结:
四种焦点策略,获取焦点方式;
Qt::TabFocus
通过Tab键获得焦点
Qt::ClickFocus
通过被单击获得焦点
Qt::StrongFocus
可通过上面两种方式获得焦点
Qt::NoFocus
不能通过上两种方式获得焦点(默认值),setFocus仍可使其获得焦点