crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Проблемы с прокруткой в QListView
BagmutA
  опции профиля:
сообщение 29.4.2011, 15:52
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 27
Регистрация: 13.4.2011
Пользователь №: 2599

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




Репутация:   0  


Создаю объект представления QListView и делаю так чтобы эллементы размещались слева на право.
PreviewListFl = new QListView(this);
PreviewListFl->setFlow(QListView::LeftToRight);

Как сделать так чтобы при прокручивания колесика мышки представления прокручивалось слева на право, а не сверху вниз?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.4.2011, 16:31
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9668
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


BagmutA, а оно у тебя по горизонтали не помещается?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BagmutA
  опции профиля:
сообщение 29.4.2011, 16:37
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 27
Регистрация: 13.4.2011
Пользователь №: 2599

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 29.4.2011, 16:31) *
BagmutA, а оно у тебя по горизонтали не помещается?

Ну да.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.4.2011, 16:52
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9668
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


тогда тебе нужно:
либо создать наследника и переопределить метод wheelEvent(QWheelEvent *e),
либо повесить фильтр событий на событие wheelEvent(QWheelEvent *e) объекта PreviewListFl

Реализацию можно сделать по аналогии с
void QAbstractScrollArea::wheelEvent ( QWheelEvent * e )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BagmutA
  опции профиля:
сообщение 29.4.2011, 17:33
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 27
Регистрация: 13.4.2011
Пользователь №: 2599

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 29.4.2011, 16:52) *
тогда тебе нужно:
либо создать наследника и переопределить метод wheelEvent(QWheelEvent *e),
либо повесить фильтр событий на событие wheelEvent(QWheelEvent *e) объекта PreviewListFl

Реализацию можно сделать по аналогии с
void QAbstractScrollArea::wheelEvent ( QWheelEvent * e )


Делаю вот так:
void PreviewListFl::wheelEvent( QWheelEvent* e )
{
    if( static_cast< QWheelEvent* >( e )->orientation() == Qt::Vertical )
        QApplication::sendEvent( horizontalScrollBar(), e );
}

Но когда колесико прокручивается, а QListView уже некуда двигатся то программа падает. Как ограничить отсылку события только пока у QListView есть возможность прокручиватся?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 30.4.2011, 21:13
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9668
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(BagmutA @ 29.4.2011, 20:33) *
Но когда колесико прокручивается, а QListView уже некуда двигатся то программа падает.
это странно. Надо с помощью отладчика выяснить где именно падает.

Цитата(BagmutA @ 29.4.2011, 20:33) *
Как ограничить отсылку события только пока у QListView есть возможность прокручиватся?
В этом нет необходимости. Линейка прокрутки сама обрабатывает эту ситуацию (когда ты прокручиваешь колёсико, вертикальная линейка ведёт себя адекватно)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PAFOS
  опции профиля:
сообщение 6.5.2011, 8:39
Сообщение #7


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

Группа: Участник
Сообщений: 258
Регистрация: 27.12.2010
Из: Дмитров
Пользователь №: 2309

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




Репутация:   8  


Вот так сваливается при достижении полосой прокрутки конца:\

bool MainWindow::eventFilter(QObject *obj, QEvent *ev)
{
    if( obj == listView && ev->type() == QEvent::Wheel )
    {
        QWheelEvent *e = dynamic_cast<QWheelEvent*>(ev);
        if( e->orientation() == Qt::Vertical )
        {

            QApplication::sendEvent((QObject*)listView->horizontalScrollBar(),new QWheelEvent(e->pos(),e->delta(),e->buttons(),e->modifiers(),Qt::Vertical));
            ev->ignore();
            return true;
        }
    }

    return false;
}


А вот так работает замечательно:

bool MainWindow::eventFilter(QObject *obj, QEvent *ev)
{
    if( obj == listView && ev->type() == QEvent::Wheel )
    {
        QWheelEvent *e = dynamic_cast<QWheelEvent*>(ev);
        if( e->orientation() == Qt::Vertical )
        {

            QApplication::sendEvent((QObject*)listView->horizontalScrollBar(),new QWheelEvent(e->pos(),e->delta(),e->buttons(),e->modifiers(),Qt::Horizontal));
            ev->ignore();
            return true;
        }
    }

    return false;
}


Найди 1 отличие ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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




RSS Текстовая версия Сейчас: 26.10.2021, 11:35