![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Анна |
![]()
Сообщение
#1
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 276 Регистрация: 22.5.2008 Из: Зеленоград Пользователь №: 181 Спасибо сказали: 30 раз(а) Репутация: ![]() ![]() ![]() |
Суть проблемы:
Есть очень длинная форма для заполнения с QSpinBox, с QComboBox и т.п. Поскольку окно ограничено в размерах, то форма размещена на QScrollArea. При кручении колёсика и прокрутке формы курсор мыши может оказаться на QSpinBox или QComboBox, и тогда их значения резко меняются. Хочется, чтобы прокрутку формы можно было осуществлять только таская бегунок скроллера мышкой. Пожалуйста, помогите реализовать. А то просто зашиваюсь по времени. Если есть возможность "прихлопнуть" возможность изменения значений QSpinBox или QComboBox при вращении колёсика, такой вариант тоже сгодится. Может, такой вариант даже больше подойдёт. |
|
|
![]() |
Анна |
![]()
Сообщение
#2
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 276 Регистрация: 22.5.2008 Из: Зеленоград Пользователь №: 181 Спасибо сказали: 30 раз(а) Репутация: ![]() ![]() ![]() |
вот я добавил туда вложенный виджет класса QScrollArea. Обработчик даже не пришлось трогать, благодаря рекурсивному поиску чайлдов. Увы, свой виджет дать не могу. У меня нет доступа в интернет с компа, но он не сильно отличается от первого варианта. Вся печаль заключается в том, что когда я полностью подставила твой класс (правда, мой компилятор не всегда понимает твой код, пришлось подправить), то возникает проблема при закрытии приложения: либо приложение остаётся висеть в памяти (даже под отладчиком),, либо возникает ошибка "CRT detected that the application wrote to memory after end of heap buffer". Ошибка возникает только, если на виджете провернуть колесо. Это какой-то бред собачий. Но я под отладчиком виду как вызывается деструктор моего виджета, и дальше всё гибнет уже в глубинах куты. У меня vc 2010. В общем, стабильно работает вариант, когда eventFilter() является методом самого виджета, а вместо return true; стоит вызов sendEvent(scrollArea->widget(),event) |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 11.5.2025, 18:35 |