当程序更改QDoubleSpinBox的值时,停止突出显示和光标出现

时间:2014-02-16 15:49:42

标签: qt qspinbox

是否可以这样做,如果我在程序中为旋转框设置一个值,它不会突出显示更改的字段,或添加一个光标。我已经包含下面某些插槽的代码,它控制最小和最大字段,如果min> gt max等,则更改另一个插槽。第二个插槽显示所需的行为,但如果在键入值后单击旋转控件则会崩溃(无返回)。我的所有旋转框都有键盘跟踪。

void show_graph::on_vmin_dspinBox_valueChanged(double arg1)
{
active = false; /*flag to stop cyclic interactions*/
if (arg1>=ui->vmax_dSpinBox->value())
    {
    ui->vmax_dSpinBox->setValue(arg1);
    ui->vmax_dSpinBox->stepUp();
    }
active = true;
}

第二种方法很丑陋,试图操纵焦点。

void show_graph::on_fmin_dspinBox_valueChanged(double arg1)
{
active = false;
QWidget *active_item;
if (QApplication::focusWidget()!=0)
        active_item = QApplication::focusWidget(); /*save focus*/
if (arg1>=ui->fmax_dspinBox->value())
    {
    ui->fmax_dspinBox->setValue(arg1);
    ui->fmax_dspinBox->stepUp();
    }
ui->fmax_dspinBox->cursor(); /*move focus to changed widget*/
ui->fmax_dspinBox->setFocus();
ui->fmax_dspinBox->unsetCursor(); /*then remove to lose highlight and cursor*/
ui->fmax_dspinBox->clearFocus();
active_item->setFocus(); /*know I'm missing check of if active item set but this doesn't appear to be the issue*/
active_item->cursor(); /*reset focus/cursor to where user wanted*/
active = true;
}

上述代码在editFinished插槽中使用时也会崩溃。尝试获取问题的屏幕截图但按下打印屏幕会删除不需要的突出显示/光标。 我是QT的新手,因此,如果这是一个愚蠢的方式,请说出来,或者如果答案在文档中,请指出我正确的方向。我正在开发和测试Linux,如果它有任何区别。

1 个答案:

答案 0 :(得分:0)

一般来说,对于所有用户可编辑控件,以编程方式更改值不应影响焦点。旋转框似乎是这个区域的一个错误。

解决方法是不使用stepBy API - 改为使用setValue

由于调用stepUp等同于将值递增一步,修复方法是更改​​代码,如下所示:

ui->vmax_dSpinBox->setValue(arg1 + ui->vmax_dSpinBox->singleStep());