Название: [РЕШЕНО] Связывание скроллируемых списков Отправлено: boruh от Апрель 23, 2010, 00:48 Здравствуйте, коллеги.
Столкнулся с небольшой задачкой: есть окно, на нем лежат два QListView, в которых выведены одинаковые (или почти одинаковые) списки со значениями. И нужно сделать так, что бы при скроллировании одной из вьюх синхронно скроллировалась вторая. Т.е. эдакий синхронизъм. Я вообщем-то решил задачу, но как-то шатко все получилось - возникают "провалы", отставания, рассинхронизация и т.д. Хотелось бы узнать ваше мнение по данному вопросу: как лучше реализовать такую синхронность. Название: Re: Связывание скроллируемых списков Отправлено: lit-uriy от Апрель 23, 2010, 01:27 Я бы начал экспериментировать так:
на родительском виджете (на котором расположены оба представления) повесил фильтр событий на оба представления. В обработчике фильтра определял какое из представлений получает QWheelEvent, и насколько нужно прокрутить оба представления. Саму прокрутку обрамил бы в setUpdateEnabled, чтобы визуальных касечков видно не было Название: Re: Связывание скроллируемых списков Отправлено: boruh от Апрель 23, 2010, 01:56 Но скроллирование ведь может не только по колесу мыши срабатывать. Может и по нажатию по клавишам на клаве, может и по тасканию ползунка. Хотя все эти события можно так же перехватывать.
Да, еще важный момент, я не совсем правильно описал структуру формы. На форме лежит два QTabWidget, и в каждом из них есть по QListView. Т.е. вьюхи не на самой форме лежат, а в табвиджетах. Название: Re: Связывание скроллируемых списков Отправлено: GreatSnake от Апрель 23, 2010, 08:11 lit-uriy
Зачем так усложнять? boruh QListView::verticalScrollBar()->valueChanged(int) QListView::horizontalScrollBar()->valueChanged(int) Вешаете на каждый QScrollBar слот и синхронизируете значение для другого соответствующего scrollbar-a. Только нужно или блокировать сигналы или вставить гарды, чтобы избежать рекурсии. Название: Re: Связывание скроллируемых списков Отправлено: Kolobok от Апрель 23, 2010, 11:11 Только нужно или блокировать сигналы или вставить гарды, чтобы избежать рекурсии. Рекурсии не будет. Если новое значение равно старому, ничего не происходит. Название: Re: Связывание скроллируемых списков Отправлено: GreatSnake от Апрель 23, 2010, 11:20 Цитировать Рекурсии не будет. Если новое значение равно старому, ничего не происходит. Да, действительно так. Чего-то я зря перестраховался.Название: Re: Связывание скроллируемых списков Отправлено: SABROG от Апрель 23, 2010, 14:18 Вроде даже работает.
Код
Название: Re: Связывание скроллируемых списков Отправлено: Kolobok от Апрель 23, 2010, 14:42 так лучше :)
Код: QScrollBar* vScroll1 = ui->listWidget->verticalScrollBar(); Название: Re: Связывание скроллируемых списков Отправлено: SABROG от Апрель 23, 2010, 15:29 Если на одном из виджетов не нужен scrollbar, то можно так сделать:
Код
Название: Re: Связывание скроллируемых списков Отправлено: boruh от Апрель 23, 2010, 22:12 Коллеги!
Огромное спасибо, премного благодарен! Стыдно, но я проморгал сигнал valueChanged(), потому и хлипко все работало. Теперь все как влитое. Маркирую как РЕШЕНО! |