2014-02-16 2 views
0

Можно ли сделать так, чтобы, если я установил значение для окна вращения в программе, оно не выделяет измененное поле или не добавляет курсор. Я включил код для некоторых из слотов ниже, который управляет минимальным и максимальным полем и изменяет другое, если min> max и т. Д. Второй слот демонстрирует желаемое поведение, но падает, если вы нажмете кнопку управления спинкой после ввода значения (без вернуть). Все мои спин-боксы отключают клавиатуру.Остановить выделение и курсор, появляющийся при изменении значения программы QDoubleSpinBox

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; 
} 

Приведенный выше код также разбился при использовании в редактируемом слоте. Пытался получить экранный снимок проблемы, но при нажатии на экран печати удаляется нежелательная подсветка/курсор. Я новичок в QT, и поэтому, если это глупый способ сделать это, скажите так, или если ответ лежит в документации, пожалуйста, укажите мне в правильном направлении. Я разрабатываю и тестирую Linux, если это имеет значение.

+0

Что ваша версия Qt? –

ответ

0

Вообще говоря, для всех пользовательских редактируемых элементов управления программное изменение значения не должно вообще затрагивать фокус. В коробке со спинкой есть то, что кажется ошибкой в ​​этой области.

Обходное решение не должно использовать API stepBy - вместо этого используйте setValue.

Поскольку вызов stepUp эквивалентно приращение значения на один шаг, исправить это изменить код следующим образом:

ui->vmax_dSpinBox->setValue(arg1 + ui->vmax_dSpinBox->singleStep()); 
Смежные вопросы