crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Прокрутка в QScrollArea
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Алексей1153 Дата 13.3.2019, 12:25
 
Цитата(Анна @ 13.3.2019, 12:54) *
Проблема решилась полной пересборкой

кстати, да, такое тоже бывает. И не только у студии, но и у QtCreator тоже.

Если некоторое время какой-нибудь непонятный баг достаёт, рекомендую делать полный ребилд, а потом снова проверить наличие бага

Цитата(Анна @ 13.3.2019, 12:54) *
Будет время, попробую сделать так, чтобы прокрутка срабатывала только при наезде мышки на вертикальный или горизонтальный скроллер,


пригодятся обработчики (либо фильтр на соответствующие события)
void QWidget::leaveEvent
void QWidget::enterEvent
Анна Дата 13.3.2019, 10:54
 
Цитата(Алексей1153 @ 12.3.2019, 12:34) *
Анна, это ты про 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
 
Цитата(Алексей1153 @ 11.3.2019, 18:18) *
не понимаю вопрос.
Я вообще вместе с QtCreator обычно обновляю, там в комплекте приложен Qt

Ну... Сейчас QT хочет ставиться только онлайн. А у меня нет доступа в интернет с рабочей машины. Так что мне просто обновление не подходит. Надо будет ставить ручками. Кстати. 13 - это альфа версия. Официально в доступе для установки 12-я.

Цитата(Алексей1153 @ 11.3.2019, 18:18) *
сомневаюсь, что сдвинутые координаты могли вызвать краш

Увы. Я тоже в этом сомневаюсь. Если честно, я не понимаю, что такого криминального в том, что я перехватила событие, предназначенное для одного виджета, и передала на обработку в другой виджет. Да, при таком способе с относительными и глобальными координатами у события косяк, но не до такой же степени, чтобы давать повод обваливаться или зависать.

Есть тут на форуме один человек, который здорово помог когда-то с обработкой события закрытия. К сожалению, ника не помню. Аватарка - какой-то розовый пузатый покемончик. Я надеялась, что он заглянет сюда и что-нибудь дельное скажет.
Алексей1153 Дата 11.3.2019, 18:18
 
Цитата(Анна @ 11.3.2019, 18:22) *
Там в single исходники лежат?

не понимаю вопрос.
Я вообще вместе с QtCreator обычно обновляю, там в комплекте приложен Qt

Цитата(Анна @ 11.3.2019, 19:42) *
Возможно, дело в относительных координатах

сомневаюсь, что сдвинутые координаты могли вызвать краш
Анна Дата 11.3.2019, 17:42
 
Цитата(Алексей1153 @ 11.3.2019, 16:01) *
ты не создаёшь на стеке, а пересылаешь. Может, в этом проблема

Возможно, дело в относительных координатах, которые есть в событии. Попробую создать своё событие от колеса с правильными координатами.
Анна Дата 11.3.2019, 16:22
 
Цитата(Алексей1153 @ 11.3.2019, 15:58) *
http://download.qt.io/development_releases/qt/

будет повод обновиться


Там в 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
 
Цитата(Алексей1153 @ 6.3.2019, 21:05) *
покрутил по всякому - вроде работает.

Собрала твой пример. ...У меня, по-прежнему, прокрутка останавливается, как только курсор оказывается на любом боксе. Видимо, это реализация QT 5.5.1.

Попробую разобраться, почему некорректно завершается приложение, если всё-таки отдать событие области прокрутки через sendEvent(). Почему-то происходит попытка удалить статическую переменную. Я не вижу никакого "криминала" в том, что перехватив событие для бокса я отдаю его в обработку другому виджету. Видимо, какие-то тонкости я не учла. Если разберусь, остановлюсь на этом варианте.

Кстати, не вижу смысла устанавливать фокус на scrollArea->widget(). По-моему, предыдущий вариант со сбросом фокуса более приемлем.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 21:17