Russian Qt Forum

Qt => Model-View (MV) => Тема начата: BagmutA от Апрель 29, 2011, 15:49



Название: Проблемы с прокруткой в QListView
Отправлено: BagmutA от Апрель 29, 2011, 15:49
Создаю объект представления QListView и делаю так чтобы эллементы размещались слева на право.
Код
C++ (Qt)
PreviewListFl = new QListView(this);
PreviewListFl->setFlow(QListView::LeftToRight);
Как сделать так чтобы при прокручивания колесика мышки представления прокручивалось слева на право, а не сверху вниз?


Название: Re: Проблемы с прокруткой в QListView
Отправлено: GreatSnake от Апрель 29, 2011, 16:08
Да, у троллей с этим засада :(
Перегрузи
Цитировать
void QAbstractScrollArea::wheelEvent(QWheelEvent *e)
.


Название: Re: Проблемы с прокруткой в QListView
Отправлено: BagmutA от Апрель 29, 2011, 16:37
Да, у троллей с этим засада :(
Перегрузи
Цитировать
void QAbstractScrollArea::wheelEvent(QWheelEvent *e)
.
И что писать в перегруженой функцие ???


Название: Re: Проблемы с прокруткой в QListView
Отправлено: GreatSnake от Апрель 29, 2011, 16:46
Код
C++ (Qt)
void YourListView::wheelEvent( QWheelEvent* e )
{
if( static_cast< QWheelEvent* >( e )->orientation() == Qt::Vertical )
QApplication::sendEvent( horizontalScrollBar(), e );
}
 


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


Название: Re: Проблемы с прокруткой в QListView
Отправлено: BagmutA от Апрель 29, 2011, 17:21
Точнее проблема возникает когда колесико прокручивается, а QListView уже некуда двигатся. Как теперь ограничить отсылку события только пока у  QListView есть возможность прокручиватся?


Название: Re: Проблемы с прокруткой в QListView
Отправлено: BagmutA от Апрель 29, 2011, 23:50
Проблема решена. 8)
Пришлось вот так извращатся:
Код
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 );
}
}