crossplatform.ru

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


  Ответ в Проблемы с прокруткой в QListView
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
PAFOS Дата 6.5.2011, 8:39
  Вот так сваливается при достижении полосой прокрутки конца:\

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 отличие ;)
Litkevich Yuriy Дата 30.4.2011, 21:13
 
Цитата(BagmutA @ 29.4.2011, 20:33) *
Но когда колесико прокручивается, а QListView уже некуда двигатся то программа падает.
это странно. Надо с помощью отладчика выяснить где именно падает.

Цитата(BagmutA @ 29.4.2011, 20:33) *
Как ограничить отсылку события только пока у QListView есть возможность прокручиватся?
В этом нет необходимости. Линейка прокрутки сама обрабатывает эту ситуацию (когда ты прокручиваешь колёсико, вертикальная линейка ведёт себя адекватно)
BagmutA Дата 29.4.2011, 17:33
 
Цитата(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 Дата 29.4.2011, 16:52
  тогда тебе нужно:
либо создать наследника и переопределить метод wheelEvent(QWheelEvent *e),
либо повесить фильтр событий на событие wheelEvent(QWheelEvent *e) объекта PreviewListFl

Реализацию можно сделать по аналогии с
void QAbstractScrollArea::wheelEvent ( QWheelEvent * e )
BagmutA Дата 29.4.2011, 16:37
 
Цитата(Litkevich Yuriy @ 29.4.2011, 16:31) *
BagmutA, а оно у тебя по горизонтали не помещается?

Ну да.
Litkevich Yuriy Дата 29.4.2011, 16:31
  BagmutA, а оно у тебя по горизонтали не помещается?
BagmutA Дата 29.4.2011, 15:52
  Создаю объект представления QListView и делаю так чтобы эллементы размещались слева на право.
PreviewListFl = new QListView(this);
PreviewListFl->setFlow(QListView::LeftToRight);

Как сделать так чтобы при прокручивания колесика мышки представления прокручивалось слева на право, а не сверху вниз?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 15:04