Russian Qt Forum
Ноябрь 23, 2024, 23:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблемы с прокруткой в QListView  (Прочитано 3445 раз)
BagmutA
Гость
« : Апрель 29, 2011, 15:49 »

Создаю объект представления QListView и делаю так чтобы эллементы размещались слева на право.
Код
C++ (Qt)
PreviewListFl = new QListView(this);
PreviewListFl->setFlow(QListView::LeftToRight);
Как сделать так чтобы при прокручивания колесика мышки представления прокручивалось слева на право, а не сверху вниз?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Апрель 29, 2011, 16:08 »

Да, у троллей с этим засада Грустный
Перегрузи
Цитировать
void QAbstractScrollArea::wheelEvent(QWheelEvent *e)
.
Записан

Qt 5.11/4.8.7 (X11/Win)
BagmutA
Гость
« Ответ #2 : Апрель 29, 2011, 16:37 »

Да, у троллей с этим засада Грустный
Перегрузи
Цитировать
void QAbstractScrollArea::wheelEvent(QWheelEvent *e)
.
И что писать в перегруженой функцие Непонимающий
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Апрель 29, 2011, 16:46 »

Код
C++ (Qt)
void YourListView::wheelEvent( QWheelEvent* e )
{
if( static_cast< QWheelEvent* >( e )->orientation() == Qt::Vertical )
QApplication::sendEvent( horizontalScrollBar(), e );
}
 
Записан

Qt 5.11/4.8.7 (X11/Win)
BagmutA
Гость
« Ответ #4 : Апрель 29, 2011, 17:07 »

Код
C++ (Qt)
void YourListView::wheelEvent( QWheelEvent* e )
{
if( static_cast< QWheelEvent* >( e )->orientation() == Qt::Vertical )
QApplication::sendEvent( horizontalScrollBar(), e );
}
 
Работает. Но  Показает язык когда при прокрутке дойти до одного из краев и попытытся вернутся назад приложение падает. В консоле пишет: Ошибка сегментирования
Записан
BagmutA
Гость
« Ответ #5 : Апрель 29, 2011, 17:21 »

Точнее проблема возникает когда колесико прокручивается, а QListView уже некуда двигатся. Как теперь ограничить отсылку события только пока у  QListView есть возможность прокручиватся?
Записан
BagmutA
Гость
« Ответ #6 : Апрель 29, 2011, 23:50 »

Проблема решена. Крутой
Пришлось вот так извращатся:
Код
C++ (Qt)
if ( (e)->orientation() == Qt::Vertical )
{
int ScrollValue = PreviewListFl->horizontalScrollBar()->value();
int ScrollMaxValue = PreviewListFl->horizontalScrollBar()->maximum();
 
if ( ScrollValue > 0 && ScrollValue < ScrollMaxValue)
{
QApplication::sendEvent( PreviewListFl->horizontalScrollBar(), e );
}
 
if ( ScrollValue == 0 && e->delta() < 0)
{
QApplication::sendEvent( PreviewListFl->horizontalScrollBar(), e );
}
if ( ScrollValue == ScrollMaxValue && e->delta() > 0)
{
QApplication::sendEvent( PreviewListFl->horizontalScrollBar(), e );
}
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.177 секунд. Запросов: 23.