Russian Qt Forum

Qt => Вопросы новичков => Тема начата: slan от Февраль 24, 2012, 11:45



Название: QSpinBox + запрет ввода пользователем [РЕШЕНО]
Отправлено: slan от Февраль 24, 2012, 11:45
Добрый день. Можно ли сабж сделать? Т.е. чтобы значения менялись только стрелочками с заданным шагом setSingleStep


Название: Re: QSpinBox + запрет ввода пользователем
Отправлено: kambala от Февраль 24, 2012, 13:54
попробуй унаследоваться от QSpinBox и сделать пустым keyPressEvent (или в фильтре событий для нужного объекта и события QEvent::KeyPress сразу возврашать true)


Название: Re: QSpinBox + запрет ввода пользователем
Отправлено: _OLEGator_ от Февраль 24, 2012, 14:29
Код
C++ (Qt)
void setReadOnly ( bool r )
Оно?


Название: Re: QSpinBox + запрет ввода пользователем
Отправлено: slan от Февраль 24, 2012, 15:02
Код
C++ (Qt)
void setReadOnly ( bool r )
Оно?
Нет не оно. Стрелочки тогда тоже не нажимаются


Название: Re: QSpinBox + запрет ввода пользователем
Отправлено: Bepec от Февраль 24, 2012, 15:20
Как извращенное решение - при получении фокуса виджетом, включать grabKeyboard для формы скажем. В результате все нажатия уйдут "мимо" спинбокса. А при потере фокуса снимать releaseKeyboard.

PS извращённое даже на мой взгляд решение, но... решение ведь!

update: ставим спинбоксу NoFocus. Вуаля. Тема решена.

Бгг 2 минуты на решение. Нормалёк.


Название: Re: QSpinBox + запрет ввода пользователем
Отправлено: slan от Февраль 24, 2012, 15:23
попробуй унаследоваться от QSpinBox и сделать пустым keyPressEvent
Так и сделал. Спасибо.
p.s. Изначально так и хотел, просто подумал а вдруг есть какой стандартный механизм


Название: Re: QSpinBox + запрет ввода пользователем
Отправлено: Bepec от Февраль 24, 2012, 15:23
;)


Название: Re: QSpinBox + запрет ввода пользователем
Отправлено: slan от Февраль 24, 2012, 15:34
Как извращенное решение - при получении фокуса виджетом, включать grabKeyboard для формы скажем. В результате все нажатия уйдут "мимо" спинбокса. А при потере фокуса снимать releaseKeyboard.

PS извращённое даже на мой взгляд решение, но... решение ведь!

update: ставим спинбоксу NoFocus. Вуаля. Тема решена.

Бгг 2 минуты на решение. Нормалёк.

а ведь действительно: setFocusPolicy(Qt::NoFocus);
пасиба :)


Название: Re: QSpinBox + запрет ввода пользователем
Отправлено: Bepec от Февраль 24, 2012, 15:35
В 1 сообщении тему поправь на "%Название_темы [РЕШЕНО]".

Чтоб другим проще было ;)


Название: Re: QSpinBox + запрет ввода пользователем [РЕШЕНО]
Отправлено: _OLEGator_ от Февраль 24, 2012, 16:52
Код
C++ (Qt)
QLineEdit * QAbstractSpinBox::lineEdit ()
void QLineEdit::setReadOnly ( bool )


Название: Re: QSpinBox + запрет ввода пользователем [РЕШЕНО]
Отправлено: Bepec от Февраль 25, 2012, 08:56
OLEGator - это уже Хак ;)


Название: Re: QSpinBox + запрет ввода пользователем [РЕШЕНО]
Отправлено: twp от Февраль 25, 2012, 11:54
OLEGator - это уже Хак ;)
Как раз наоборот, ибо продвинутые пользователи (которые используют по большей части клаву) передадут пару ласковых слов за такое "правильное" решение. А в решении, что предложил _OLEGator_ этого недостатка нет и можно переходить по элементам клавишей Tab и изменять значения клавишами вверх/вниз


Название: Re: QSpinBox + запрет ввода пользователем [РЕШЕНО]
Отправлено: _OLEGator_ от Февраль 25, 2012, 12:16
to Bepec
как раз не хак, twp уже объяснил почему. Дополнительно - нельзя будет установить фокус на элемент и воспользоваться клавишами [Вверх] и [Вниз], [Page Up] и [Page Down] для увеличения и уменьшения значения.


Название: Re: QSpinBox + запрет ввода пользователем [РЕШЕНО]
Отправлено: Bepec от Февраль 26, 2012, 09:21
А есть ли уверенность в том, что это работает?

В принципе да, пользователи привыкшие к клаве будут недовольны.

Меня ввели в заблуждения первые комментарии (где предлагалось тупо все клавиатурные нажатия пропускать ;) )


Название: Re: QSpinBox + запрет ввода пользователем [РЕШЕНО]
Отправлено: _OLEGator_ от Февраль 26, 2012, 18:15
Недосмотрел... Проблема только, что обе эти функции protected.


Название: Re: QSpinBox + запрет ввода пользователем [РЕШЕНО]
Отправлено: Bepec от Февраль 26, 2012, 23:14
Наши оба метода - хаки ;)

Просто мой - более простой/быстрый, но с недостатком (клава).
Твой - более сложный, но без недостатков  :D

1x1