Здравствуйте, гость ( Вход | Регистрация )
Алексей1153 | Дата 13.3.2019, 12:25 |
Проблема решилась полной пересборкой кстати, да, такое тоже бывает. И не только у студии, но и у QtCreator тоже. Если некоторое время какой-нибудь непонятный баг достаёт, рекомендую делать полный ребилд, а потом снова проверить наличие бага Будет время, попробую сделать так, чтобы прокрутка срабатывала только при наезде мышки на вертикальный или горизонтальный скроллер, пригодятся обработчики (либо фильтр на соответствующие события)
|
|
Анна | Дата 13.3.2019, 10:54 |
Анна, это ты про lanz'а, наверное, говоришь http://www.forum.crossplatform.ru/index.php?showuser=3660 - давненько не появляется почему-то. И вообще, я его сообщений как-то не нашёл, то ли он их поудалял все Да, кажется, он. Цитата насчёт краша - надо для начала ловить в отладчике, где остановилось, а там раскрутить стек обратно. Часто этого бывает достаточно для поиска проблемы Проблема решилась полной пересборкой. Похоже, я своими экспериментами довела msvc до ручки. Ещё раз большое спасибо. Ты меня здорово выручил. Правда, я закомментила кусок со сбрасыванием фокуса с бокса. Бокс и так теряет фокус, если колесо крутится не на нём. И я сделала хандлер ребёнком от основного виджета. Будет время, попробую сделать так, чтобы прокрутка срабатывала только при наезде мышки на вертикальный или горизонтальный скроллер, |
|
Алексей1153 | Дата 12.3.2019, 12:34 |
Анна, это ты про lanz'а, наверное, говоришь http://www.forum.crossplatform.ru/index.php?showuser=3660 - давненько не появляется почему-то. И вообще, я его сообщений как-то не нашёл, то ли он их поудалял все насчёт краша - надо для начала ловить в отладчике, где остановилось, а там раскрутить стек обратно. Часто этого бывает достаточно для поиска проблемы Если проблема связана со сроком жизни объекта, сделай его удаление явным (сейчас в его конструктор передаётся указатель на объект-парент, который вызывает delete своего чайлда в своём деструкторе). Например, в приватном мембере-указателе сохрани адрес фильтра-объекта, а в деструкторе вызови для него delete явно. Либо вообще попробуй вынести объект фильтра из "опекаемого" класса. Тогда экземпляр фильтра можно заставить жить дольше экземпляра "опекаемого" класса |
|
Анна | Дата 12.3.2019, 12:15 |
Затыки прокрутки при попадании мышки на бокс решились просто: if(!control->hasFocus()) { event->ignore(); return true; } Об этом написано в документации к QWheelEvent. А вот слёты при закрытии при приложения связаны с созданием екземпляра перехватчика события. Буду разбираться дальше. Но изначальная проблема решена! Спасибо, Алексей1153! |
|
Анна | Дата 12.3.2019, 10:30 |
не понимаю вопрос. Я вообще вместе с QtCreator обычно обновляю, там в комплекте приложен Qt Ну... Сейчас QT хочет ставиться только онлайн. А у меня нет доступа в интернет с рабочей машины. Так что мне просто обновление не подходит. Надо будет ставить ручками. Кстати. 13 - это альфа версия. Официально в доступе для установки 12-я. сомневаюсь, что сдвинутые координаты могли вызвать краш Увы. Я тоже в этом сомневаюсь. Если честно, я не понимаю, что такого криминального в том, что я перехватила событие, предназначенное для одного виджета, и передала на обработку в другой виджет. Да, при таком способе с относительными и глобальными координатами у события косяк, но не до такой же степени, чтобы давать повод обваливаться или зависать. Есть тут на форуме один человек, который здорово помог когда-то с обработкой события закрытия. К сожалению, ника не помню. Аватарка - какой-то розовый пузатый покемончик. Я надеялась, что он заглянет сюда и что-нибудь дельное скажет. |
|
Алексей1153 | Дата 11.3.2019, 18:18 |
Там в single исходники лежат? не понимаю вопрос. Я вообще вместе с QtCreator обычно обновляю, там в комплекте приложен Qt Возможно, дело в относительных координатах сомневаюсь, что сдвинутые координаты могли вызвать краш |
|
Анна | Дата 11.3.2019, 17:42 |
ты не создаёшь на стеке, а пересылаешь. Может, в этом проблема Возможно, дело в относительных координатах, которые есть в событии. Попробую создать своё событие от колеса с правильными координатами. |
|
Анна | Дата 11.3.2019, 16:22 |
Там в single исходники лежат? |
|
Алексей1153 | Дата 11.3.2019, 16:01 |
Анна, у меня 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: а ты не создаёшь на стеке, а пересылаешь. Может, в этом проблема |
|
Анна | Дата 11.3.2019, 15:30 |
покрутил по всякому - вроде работает. Собрала твой пример. ...У меня, по-прежнему, прокрутка останавливается, как только курсор оказывается на любом боксе. Видимо, это реализация QT 5.5.1. Попробую разобраться, почему некорректно завершается приложение, если всё-таки отдать событие области прокрутки через sendEvent(). Почему-то происходит попытка удалить статическую переменную. Я не вижу никакого "криминала" в том, что перехватив событие для бокса я отдаю его в обработку другому виджету. Видимо, какие-то тонкости я не учла. Если разберусь, остановлюсь на этом варианте. Кстати, не вижу смысла устанавливать фокус на scrollArea->widget(). По-моему, предыдущий вариант со сбросом фокуса более приемлем. |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.3.2024, 14:26 |