Можно ли сделать так, чтобы, если я установил значение для окна вращения в программе, оно не выделяет измененное поле или не добавляет курсор. Я включил код для некоторых из слотов ниже, который управляет минимальным и максимальным полем и изменяет другое, если 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, если это имеет значение.
Что ваша версия Qt? –