crossplatform.ru

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

4 страниц V  < 1 2 3 4 >  
Ответить в данную темуНачать новую тему
> Прокрутка в QScrollArea
Алексей1153
  опции профиля:
сообщение 6.3.2019, 19:34
Сообщение #21


фрилансер
******

Группа: Участник
Сообщений: 2879
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Анна, щас попробую с QMdiSubWindow пример нарисовать. Но быстро не получится, поэкспериментировать придётся )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 6.3.2019, 21:05
Сообщение #22


фрилансер
******

Группа: Участник
Сообщений: 2879
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


кое-что исправил и упростил. В примере две кнопки - одна открывает прежний виджет, другая Mdi с четырьмя субокнами, в каждом из которых всё тот же виджет. Обработчик в обоих случаях один - универсальный

покрутил по всякому - вроде работает. Постарался без использования C++11 оформить. Если что будет непонятно - давай вопросы )

Прикрепленный файл  PRJ_MyScrollHandler.zip ( 13.92 килобайт ) Кол-во скачиваний: 95
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Анна
  опции профиля:
сообщение 11.3.2019, 15:30
Сообщение #23


Активный участник
***

Группа: Участник
Сообщений: 276
Регистрация: 22.5.2008
Из: Зеленоград
Пользователь №: 181

Спасибо сказали: 30 раз(а)




Репутация:   4  


Цитата(Алексей1153 @ 6.3.2019, 21:05) *
покрутил по всякому - вроде работает.

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

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

Кстати, не вижу смысла устанавливать фокус на scrollArea->widget(). По-моему, предыдущий вариант со сбросом фокуса более приемлем.

Сообщение отредактировал Анна - 11.3.2019, 15:31
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 11.3.2019, 16:01
Сообщение #24


фрилансер
******

Группа: Участник
Сообщений: 2879
Регистрация: 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  


Цитата(Алексей1153 @ 11.3.2019, 15:58) *
http://download.qt.io/development_releases/qt/

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


Там в single исходники лежат?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Анна
  опции профиля:
сообщение 11.3.2019, 17:42
Сообщение #26


Активный участник
***

Группа: Участник
Сообщений: 276
Регистрация: 22.5.2008
Из: Зеленоград
Пользователь №: 181

Спасибо сказали: 30 раз(а)




Репутация:   4  


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

Возможно, дело в относительных координатах, которые есть в событии. Попробую создать своё событие от колеса с правильными координатами.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 11.3.2019, 18:18
Сообщение #27


фрилансер
******

Группа: Участник
Сообщений: 2879
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(Анна @ 11.3.2019, 18:22) *
Там в single исходники лежат?

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

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

сомневаюсь, что сдвинутые координаты могли вызвать краш

Сообщение отредактировал Алексей1153 - 11.3.2019, 18:21
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Анна
  опции профиля:
сообщение 12.3.2019, 10:30
Сообщение #28


Активный участник
***

Группа: Участник
Сообщений: 276
Регистрация: 22.5.2008
Из: Зеленоград
Пользователь №: 181

Спасибо сказали: 30 раз(а)




Репутация:   4  


Цитата(Алексей1153 @ 11.3.2019, 18:18) *
не понимаю вопрос.
Я вообще вместе с QtCreator обычно обновляю, там в комплекте приложен Qt

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

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

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

Есть тут на форуме один человек, который здорово помог когда-то с обработкой события закрытия. К сожалению, ника не помню. Аватарка - какой-то розовый пузатый покемончик. Я надеялась, что он заглянет сюда и что-нибудь дельное скажет.

Сообщение отредактировал Анна - 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


фрилансер
******

Группа: Участник
Сообщений: 2879
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Анна, это ты про lanz'а, наверное, говоришь http://www.forum.crossplatform.ru/index.php?showuser=3660
- давненько не появляется почему-то. И вообще, я его сообщений как-то не нашёл, то ли он их поудалял все

насчёт краша - надо для начала ловить в отладчике, где остановилось, а там раскрутить стек обратно. Часто этого бывает достаточно для поиска проблемы

Если проблема связана со сроком жизни объекта, сделай его удаление явным (сейчас в его конструктор передаётся указатель на объект-парент, который вызывает delete своего чайлда в своём деструкторе). Например, в приватном мембере-указателе сохрани адрес фильтра-объекта, а в деструкторе вызови для него delete явно. Либо вообще попробуй вынести объект фильтра из "опекаемого" класса. Тогда экземпляр фильтра можно заставить жить дольше экземпляра "опекаемого" класса

Сообщение отредактировал Алексей1153 - 12.3.2019, 12:35
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V  < 1 2 3 4 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.6.2019, 13:39