Прокрутка в QScrollArea |
Здравствуйте, гость ( Вход | Регистрация )
Прокрутка в QScrollArea |
Алексей1153 |
6.3.2019, 19:34
Сообщение
#21
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Анна, щас попробую с QMdiSubWindow пример нарисовать. Но быстро не получится, поэкспериментировать придётся )
|
|
|
Алексей1153 |
6.3.2019, 21:05
Сообщение
#22
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
кое-что исправил и упростил. В примере две кнопки - одна открывает прежний виджет, другая Mdi с четырьмя субокнами, в каждом из которых всё тот же виджет. Обработчик в обоих случаях один - универсальный
покрутил по всякому - вроде работает. Постарался без использования C++11 оформить. Если что будет непонятно - давай вопросы ) PRJ_MyScrollHandler.zip ( 13,92 килобайт ) Кол-во скачиваний: 548 |
|
|
Анна |
11.3.2019, 15:30
Сообщение
#23
|
Активный участник Группа: Участник Сообщений: 276 Регистрация: 22.5.2008 Из: Зеленоград Пользователь №: 181 Спасибо сказали: 30 раз(а) Репутация: 4 |
покрутил по всякому - вроде работает. Собрала твой пример. ...У меня, по-прежнему, прокрутка останавливается, как только курсор оказывается на любом боксе. Видимо, это реализация QT 5.5.1. Попробую разобраться, почему некорректно завершается приложение, если всё-таки отдать событие области прокрутки через sendEvent(). Почему-то происходит попытка удалить статическую переменную. Я не вижу никакого "криминала" в том, что перехватив событие для бокса я отдаю его в обработку другому виджету. Видимо, какие-то тонкости я не учла. Если разберусь, остановлюсь на этом варианте. Кстати, не вижу смысла устанавливать фокус на scrollArea->widget(). По-моему, предыдущий вариант со сбросом фокуса более приемлем. Сообщение отредактировал Анна - 11.3.2019, 15:31 |
|
|
Алексей1153 |
11.3.2019, 16:01
Сообщение
#24
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Анна, у меня Qt 5.9.2, а на сайте уже аж 5.13
http://download.qt.io/development_releases/qt/ будет повод обновиться насчёт фокуса - ну, надо куда-то его переставить, а просто убрать текущий не всегда возможно, ведь фоку может быть на чайлде другой области прокрутки Анна, кстати, в описании сказано Цитата bool QCoreApplication::sendEvent(QObject *receiver, QEvent *event) Sends event event directly to receiver receiver, using the notify() function. Returns the value that was returned from the event handler. The event is not deleted when the event has been sent. The normal approach is to create the event on the stack, for example: а ты не создаёшь на стеке, а пересылаешь. Может, в этом проблема Сообщение отредактировал Алексей1153 - 11.3.2019, 16:02 |
|
|
Анна |
11.3.2019, 16:22
Сообщение
#25
|
Активный участник Группа: Участник Сообщений: 276 Регистрация: 22.5.2008 Из: Зеленоград Пользователь №: 181 Спасибо сказали: 30 раз(а) Репутация: 4 |
Там в single исходники лежат? |
|
|
Анна |
11.3.2019, 17:42
Сообщение
#26
|
Активный участник Группа: Участник Сообщений: 276 Регистрация: 22.5.2008 Из: Зеленоград Пользователь №: 181 Спасибо сказали: 30 раз(а) Репутация: 4 |
|
|
|
Алексей1153 |
11.3.2019, 18:18
Сообщение
#27
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Там в single исходники лежат? не понимаю вопрос. Я вообще вместе с QtCreator обычно обновляю, там в комплекте приложен Qt Возможно, дело в относительных координатах сомневаюсь, что сдвинутые координаты могли вызвать краш Сообщение отредактировал Алексей1153 - 11.3.2019, 18:21 |
|
|
Анна |
12.3.2019, 10:30
Сообщение
#28
|
Активный участник Группа: Участник Сообщений: 276 Регистрация: 22.5.2008 Из: Зеленоград Пользователь №: 181 Спасибо сказали: 30 раз(а) Репутация: 4 |
не понимаю вопрос. Я вообще вместе с QtCreator обычно обновляю, там в комплекте приложен Qt Ну... Сейчас QT хочет ставиться только онлайн. А у меня нет доступа в интернет с рабочей машины. Так что мне просто обновление не подходит. Надо будет ставить ручками. Кстати. 13 - это альфа версия. Официально в доступе для установки 12-я. сомневаюсь, что сдвинутые координаты могли вызвать краш Увы. Я тоже в этом сомневаюсь. Если честно, я не понимаю, что такого криминального в том, что я перехватила событие, предназначенное для одного виджета, и передала на обработку в другой виджет. Да, при таком способе с относительными и глобальными координатами у события косяк, но не до такой же степени, чтобы давать повод обваливаться или зависать. Есть тут на форуме один человек, который здорово помог когда-то с обработкой события закрытия. К сожалению, ника не помню. Аватарка - какой-то розовый пузатый покемончик. Я надеялась, что он заглянет сюда и что-нибудь дельное скажет. Сообщение отредактировал Анна - 12.3.2019, 10:23 |
|
|
Анна |
12.3.2019, 12:15
Сообщение
#29
|
Активный участник Группа: Участник Сообщений: 276 Регистрация: 22.5.2008 Из: Зеленоград Пользователь №: 181 Спасибо сказали: 30 раз(а) Репутация: 4 |
Затыки прокрутки при попадании мышки на бокс решились просто:
if(!control->hasFocus()) { event->ignore(); return true; } Об этом написано в документации к QWheelEvent. А вот слёты при закрытии при приложения связаны с созданием екземпляра перехватчика события. Буду разбираться дальше. Но изначальная проблема решена! Спасибо, Алексей1153! |
|
|
Алексей1153 |
12.3.2019, 12:34
Сообщение
#30
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Анна, это ты про lanz'а, наверное, говоришь http://www.forum.crossplatform.ru/index.php?showuser=3660
- давненько не появляется почему-то. И вообще, я его сообщений как-то не нашёл, то ли он их поудалял все насчёт краша - надо для начала ловить в отладчике, где остановилось, а там раскрутить стек обратно. Часто этого бывает достаточно для поиска проблемы Если проблема связана со сроком жизни объекта, сделай его удаление явным (сейчас в его конструктор передаётся указатель на объект-парент, который вызывает delete своего чайлда в своём деструкторе). Например, в приватном мембере-указателе сохрани адрес фильтра-объекта, а в деструкторе вызови для него delete явно. Либо вообще попробуй вынести объект фильтра из "опекаемого" класса. Тогда экземпляр фильтра можно заставить жить дольше экземпляра "опекаемого" класса Сообщение отредактировал Алексей1153 - 12.3.2019, 12:35 |
|
|
Текстовая версия | Сейчас: 22.11.2024, 21:53 |